├── .bowerrc
├── .github
    ├── ISSUE_TEMPLATE
    │   ├── bug_report.md
    │   └── feature_request.md
    └── issue_template.md
├── .gitignore
├── .travis.yml
├── Gruntfile.coffee
├── LICENSE
├── README.md
├── bootstrap
    ├── css
    │   ├── bootstrap-grid.css
    │   ├── bootstrap-grid.css.map
    │   ├── bootstrap-grid.min.css
    │   ├── bootstrap-grid.min.css.map
    │   ├── bootstrap-reboot.css
    │   ├── bootstrap-reboot.css.map
    │   ├── bootstrap-reboot.min.css
    │   ├── bootstrap-reboot.min.css.map
    │   ├── bootstrap.css
    │   ├── bootstrap.css.map
    │   ├── bootstrap.min.css
    │   └── bootstrap.min.css.map
    └── js
    │   ├── bootstrap.bundle.js
    │   ├── bootstrap.bundle.js.map
    │   ├── bootstrap.bundle.min.js
    │   ├── bootstrap.bundle.min.js.map
    │   ├── bootstrap.js
    │   ├── bootstrap.js.map
    │   ├── bootstrap.min.js
    │   └── bootstrap.min.js.map
├── bower.json
├── coffeescripts
    ├── content
    │   ├── cards-common.coffee
    │   ├── cards-en.coffee
    │   ├── cards-quickbuilds.coffee
    │   ├── manifest.coffee
    │   └── rules-en.coffee
    ├── system
    │   ├── backend.coffee
    │   ├── browser.coffee
    │   ├── rules-browser.coffee
    │   ├── translate.coffee
    │   ├── xwing.coffee
    │   └── xws.coffee
    └── translations
    │   ├── cards-de.coffee
    │   ├── cards-es.coffee
    │   ├── cards-fr.coffee
    │   ├── cards-hu.coffee
    │   ├── cards-it.coffee
    │   ├── cards-jp.coffee
    │   ├── cards-pt.coffee
    │   ├── cards-zhcn.coffee
    │   └── rules-de.coffee
├── fontawesome
├── fonts
    ├── Bank Gothic Medium BT.ttf
    ├── EurostileLTStd-Bold.otf
    ├── EurostileLTStd-BoldCn.otf
    ├── EurostileLTStd-BoldEx2.otf
    ├── EurostileLTStd-BoldOblique.otf
    ├── EurostileLTStd-Cn.otf
    ├── EurostileLTStd-Demi.otf
    ├── EurostileLTStd-DemiOblique.otf
    ├── EurostileLTStd-Ex2.otf
    ├── EurostileLTStd-Oblique.otf
    ├── EurostileLTStd.otf
    ├── bankgthd.ttf
    ├── kimberley bl.ttf
    ├── xwing-miniatures-ships.ttf
    ├── xwing-miniatures.css
    └── xwing-miniatures.ttf
├── images
    ├── core2asteroid0.png
    ├── core2asteroid1.png
    ├── core2asteroid2.png
    ├── core2asteroid3.png
    ├── core2asteroid4.png
    ├── core2asteroid5.png
    ├── coreasteroid0.png
    ├── coreasteroid1.png
    ├── coreasteroid2.png
    ├── coreasteroid3.png
    ├── coreasteroid4.png
    ├── coreasteroid5.png
    ├── gascloud1.png
    ├── gascloud2.png
    ├── gascloud3.png
    ├── gascloud4.png
    ├── gascloud5.png
    ├── gascloud6.png
    ├── pomasteroid1.png
    ├── pomasteroid2.png
    ├── pomasteroid3.png
    ├── pomdebris1.png
    ├── pomdebris2.png
    ├── pomdebris3.png
    ├── vt49decimatordebris0.png
    ├── vt49decimatordebris1.png
    ├── vt49decimatordebris2.png
    ├── yt2400debris0.png
    ├── yt2400debris1.png
    └── yt2400debris2.png
├── jade
    ├── index.jade
    └── privacy.jade
├── package-lock.json
├── package.json
├── privacy.haml
├── privacy.html
└── stylesheets
    ├── xwing-print.sass
    ├── xwing-screen.sass
    └── xwing.sass
/.bowerrc:
--------------------------------------------------------------------------------
1 | {"registry": "https://registry.bower.io"}
2 | 
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | name: Bug report
 3 | about: Create a report to help us improve
 4 | title: ''
 5 | labels: ''
 6 | assignees: ''
 7 | 
 8 | ---
 9 | 
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 | 
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 | 
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 | 
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 | 
26 | **Desktop (please complete the following information):**
27 |  - OS: [e.g. iOS]
28 |  - Browser [e.g. chrome, safari]
29 |  - Version [e.g. 22]
30 | 
31 | **Smartphone (please complete the following information):**
32 |  - Device: [e.g. iPhone6]
33 |  - OS: [e.g. iOS8.1]
34 |  - Browser [e.g. stock browser, safari]
35 |  - Version [e.g. 22]
36 | 
37 | **Additional context**
38 | Add any other context about the problem here.
39 | 
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | name: Feature request
 3 | about: Suggest an idea for this project
 4 | title: ''
 5 | labels: ''
 6 | assignees: ''
 7 | 
 8 | ---
 9 | 
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 | 
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 | 
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 | 
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 | 
--------------------------------------------------------------------------------
/.github/issue_template.md:
--------------------------------------------------------------------------------
 1 | ## YASB 2.5 Bug Report
 2 | If your page doesn't load, try a hard refresh first. I update at random hours of the day and you may have been accessing the page at one of those times. 
 3 | 
 4 | **Note:** You might notice some of your loose ships are missing from your collection. This is a known issue from a recent update regarding ship names. Unfortunately you will have to reenter the missing ships. Sorry for the inconvenience.
 5 | 
 6 | ### Expected Behavior
 7 | 
 8 | State what you expect to happen here.
 9 | 
10 | ### Actual Behavior
11 | 
12 | State what actually happens here.
13 | 
14 | ### Language
15 | 
16 | The affected language(s). 
17 | 
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
 1 | *.swp
 2 | _vimrc_local.vim
 3 | .sass-cache
 4 | 
 5 | app
 6 | images
 7 | backgrounds.*
 8 | xwing.history
 9 | coffeelint.json
10 | node_modules
11 | bower_components
12 | 
13 | .idea
14 | 
15 | *.*~
16 | pushlive.sh
17 | 
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
 1 | language: node_js
 2 | node_js:
 3 |     - "7"
 4 | notifications:
 5 |     email: false
 6 | before_install:
 7 |     - npm install -g grunt-cli
 8 | before_script:
 9 |     - grunt
10 | sudo: false
11 | 
--------------------------------------------------------------------------------
/Gruntfile.coffee:
--------------------------------------------------------------------------------
 1 | module.exports = (grunt) ->
 2 |     grunt.initConfig
 3 |         coffee:
 4 |             compile:
 5 |                 options:
 6 |                     bare: true
 7 |                     join: true
 8 |                     runtime: 'window'
 9 |                     sourceMap: true
10 |                 files:
11 |                     'app/javascripts/xwing.js': ['coffeescripts/system/*.coffee']
12 |                     'app/javascripts/xwingcontent.js': ['coffeescripts/content/cards-common.coffee']
13 |                     'app/javascripts/manifest.js': ['coffeescripts/content/manifest.coffee']
14 |                     'app/javascripts/translation-en.js': ['coffeescripts/content/cards-en.coffee']
15 |                     'app/javascripts/xwingquickbuilds.js': ['coffeescripts/content/cards-quickbuilds.coffee']
16 |                     'app/javascripts/xwingrules.js': ['coffeescripts/content/rules-en.coffee']
17 |                     'app/javascripts/translations.js': ['coffeescripts/translations/*.coffee']
18 |         sass:
19 |             options:
20 |                 implementation: require('sass') 
21 |             compile:
22 |                 expand: true
23 |                 cwd: 'stylesheets/'
24 |                 src: ['*.sass']
25 |                 dest: 'app/stylesheets/'
26 |                 ext: '.css'
27 |         pug:
28 |             compile:
29 |                 expand: true
30 |                 cwd: 'jade/'
31 |                 src: ['**/*.jade']
32 |                 dest: 'app/'
33 |                 ext: '.html'
34 |         bower:
35 |             install:
36 |                 options:
37 |                     targetDir: 'app/bower_components'
38 |                     verbose: false 
39 |                     cleanTargetDir: false 
40 |                     cleanBowerDir: false 
41 |                     layout: 'byComponent'
42 |                     copy: true
43 |         uglify:
44 |             compile:
45 |                 options:
46 |                     sourceMap: true
47 |                     sourceMapIn: 'app/javascripts/xwing.js.map'
48 |                 files:
49 |                     'app/javascripts/xwing.min.js': 'app/javascripts/xwing.js'
50 |                     'app/javascripts/manifest.min.js': 'app/javascripts/manifest.js'
51 |                     'app/javascripts/xwingcontent.min.js': 'app/javascripts/xwingcontent.js'
52 |                     'app/javascripts/translation-en.min.js': 'app/javascripts/translation-en.js'
53 |                     'app/javascripts/xwingquickbuilds.min.js': 'app/javascripts/xwingquickbuilds.js'
54 |                     'app/javascripts/xwingrules.min.js': 'app/javascripts/xwingrules.js'
55 |                     'app/javascripts/translations.min.js': 'app/javascripts/translations.js'
56 |         copy:
57 |             main:
58 |                 expand: true
59 |                 src: [
60 |                     'fonts/**'
61 |                     'bootstrap/**'
62 |                     'images/**'
63 |                 ]
64 |                 dest: 'app/'
65 |             gh_pages:
66 |                 expand: true
67 |                 cwd: 'app'
68 |                 src: '**'
69 |                 dest: '../xwing_page'
70 | 
71 |     grunt.loadNpmTasks 'grunt-bower-task'
72 |     grunt.loadNpmTasks 'grunt-contrib-copy'
73 |     grunt.loadNpmTasks 'grunt-contrib-pug'
74 |     grunt.loadNpmTasks 'grunt-sass'
75 |     grunt.loadNpmTasks 'grunt-contrib-uglify'
76 |     grunt.loadNpmTasks 'grunt-contrib-coffee'
77 | 
78 |     grunt.registerTask 'default', [
79 |         'bower'
80 |         'coffee'
81 |         'sass'
82 |         'pug'
83 |         'uglify'
84 |         'copy:main'
85 |     ]
86 | 
87 |     grunt.registerTask 'gh_pages', [
88 |         'copy:gh_pages'
89 |     ]
90 | 
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
 1 | The MIT License (MIT)
 2 | 
 3 | Copyright (c) 2012 Geordan Rosario
 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
13 | all 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
21 | THE SOFTWARE.
22 | 
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
 1 | Yet Another Squad Builder 2.5
 2 | =============================
 3 | 
 4 | What?
 5 | -----
 6 | This is a squad builder for the Second Edition of the X-Wing Miniatures game by Atomic Mass Games (formerly owned by Fantasy Flight Games), completely in HTML and JavaScript.  No backend is necessary.
 7 | It can theoretically be dropped into any existing site, but since it uses a lot of styling from [Twitter Bootstrap](http://twitter.github.com/bootstrap/) it may require some CSS trickery if you're using some other incompatible framework (e.g. [Foundation](http://foundation.zurb.com)).
 8 | 
 9 | Isn't there already an Official Squadbuilder out?
10 | ----------------------------------------------------
11 | Yes, but it is no longer supported by FFG/AMG
12 | 
13 | So...?
14 | ------
15 | MAGIC
16 | 
17 | What happened to Geordanr?
18 | -----------------------
19 | He 'retired'. I took over.
20 | 
21 | When will this be done?
22 | -----------------------
23 | Whenever X-Wing as a game is dead. Our hearts don't count.
24 | 
25 | Building
26 | ========
27 | 
28 | 1. Install [Node.js](http://nodejs.org/) to get `npm`.
29 | 2. `sudo npm install -g grunt-cli` to install the global Grunt CLI.
30 | 3. `npm install` to install the dependencies listed in `package.json`.
31 | 4. `grunt` to build everything into the `app` directory.  The builder is at `app/index.html`.
32 | 
33 | Translation
34 | ===========
35 | 
36 | Wanna help translating YASB into your language? You're welcome to do so! Write an issue to contact us so we can discuss how to get started. 
37 | 
38 | Credits
39 | -------
40 | [X-Wing Miniatures](https://www.atomicmassgames.com/xwing-documents) is by [Atomic Mass Games](https://www.atomicmassgames.com/) (until 2022 it was by Fantasy Flight Games). 
41 | Icons and fonts originally from GeckoTH's excellent PSD, available [here](http://www.afewmaneuvers.com/topic/122-hi-res-photoshop-templates/).
42 | X-Wing symbols and ships fonts courtesy [Hinny](https://github.com/Hinny) and [Josh Derksen](https://github.com/armoredgear7) and are available as a [Bower package](https://github.com/geordanr/xwing-miniatures-font).
43 | Maneuver dial support by @hpanderson.
44 | Fancy printout design inspired by TheKestrel on the FFG forums.
45 | Upgrade card text integrated into printouts by [wffurr](https://github.com/wffurr).
46 | Squad name in the permalink and obstacles choice modal by [zacharyp](https://github.com/zacharyp).
47 | 
48 | I'm not keeping this ReadMe up to date often; see the About section of the builder.
49 | 
--------------------------------------------------------------------------------
/bootstrap/css/bootstrap-reboot.css:
--------------------------------------------------------------------------------
  1 | /*!
  2 |  * Bootstrap Reboot v4.5.0 (https://getbootstrap.com/)
  3 |  * Copyright 2011-2020 The Bootstrap Authors
  4 |  * Copyright 2011-2020 Twitter, Inc.
  5 |  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  6 |  * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
  7 |  */
  8 | *,
  9 | *::before,
 10 | *::after {
 11 |   box-sizing: border-box;
 12 | }
 13 | 
 14 | html {
 15 |   font-family: sans-serif;
 16 |   line-height: 1.15;
 17 |   -webkit-text-size-adjust: 100%;
 18 |   -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
 19 | }
 20 | 
 21 | article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
 22 |   display: block;
 23 | }
 24 | 
 25 | body {
 26 |   margin: 0;
 27 |   font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
 28 |   font-size: 1rem;
 29 |   font-weight: 400;
 30 |   line-height: 1.5;
 31 |   color: #212529;
 32 |   text-align: left;
 33 |   background-color: #fff;
 34 | }
 35 | 
 36 | [tabindex="-1"]:focus:not(:focus-visible) {
 37 |   outline: 0 !important;
 38 | }
 39 | 
 40 | hr {
 41 |   box-sizing: content-box;
 42 |   height: 0;
 43 |   overflow: visible;
 44 | }
 45 | 
 46 | h1, h2, h3, h4, h5, h6 {
 47 |   margin-top: 0;
 48 |   margin-bottom: 0.5rem;
 49 | }
 50 | 
 51 | p {
 52 |   margin-top: 0;
 53 |   margin-bottom: 1rem;
 54 | }
 55 | 
 56 | abbr[title],
 57 | abbr[data-original-title] {
 58 |   text-decoration: underline;
 59 |   -webkit-text-decoration: underline dotted;
 60 |   text-decoration: underline dotted;
 61 |   cursor: help;
 62 |   border-bottom: 0;
 63 |   -webkit-text-decoration-skip-ink: none;
 64 |   text-decoration-skip-ink: none;
 65 | }
 66 | 
 67 | address {
 68 |   margin-bottom: 1rem;
 69 |   font-style: normal;
 70 |   line-height: inherit;
 71 | }
 72 | 
 73 | ol,
 74 | ul,
 75 | dl {
 76 |   margin-top: 0;
 77 |   margin-bottom: 1rem;
 78 | }
 79 | 
 80 | ol ol,
 81 | ul ul,
 82 | ol ul,
 83 | ul ol {
 84 |   margin-bottom: 0;
 85 | }
 86 | 
 87 | dt {
 88 |   font-weight: 700;
 89 | }
 90 | 
 91 | dd {
 92 |   margin-bottom: .5rem;
 93 |   margin-left: 0;
 94 | }
 95 | 
 96 | blockquote {
 97 |   margin: 0 0 1rem;
 98 | }
 99 | 
100 | b,
101 | strong {
102 |   font-weight: bolder;
103 | }
104 | 
105 | small {
106 |   font-size: 80%;
107 | }
108 | 
109 | sub,
110 | sup {
111 |   position: relative;
112 |   font-size: 75%;
113 |   line-height: 0;
114 |   vertical-align: baseline;
115 | }
116 | 
117 | sub {
118 |   bottom: -.25em;
119 | }
120 | 
121 | sup {
122 |   top: -.5em;
123 | }
124 | 
125 | a {
126 |   color: #007bff;
127 |   text-decoration: none;
128 |   background-color: transparent;
129 | }
130 | 
131 | a:hover {
132 |   color: #0056b3;
133 |   text-decoration: underline;
134 | }
135 | 
136 | a:not([href]) {
137 |   color: inherit;
138 |   text-decoration: none;
139 | }
140 | 
141 | a:not([href]):hover {
142 |   color: inherit;
143 |   text-decoration: none;
144 | }
145 | 
146 | pre,
147 | code,
148 | kbd,
149 | samp {
150 |   font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
151 |   font-size: 1em;
152 | }
153 | 
154 | pre {
155 |   margin-top: 0;
156 |   margin-bottom: 1rem;
157 |   overflow: auto;
158 |   -ms-overflow-style: scrollbar;
159 | }
160 | 
161 | figure {
162 |   margin: 0 0 1rem;
163 | }
164 | 
165 | img {
166 |   vertical-align: middle;
167 |   border-style: none;
168 | }
169 | 
170 | svg {
171 |   overflow: hidden;
172 |   vertical-align: middle;
173 | }
174 | 
175 | table {
176 |   border-collapse: collapse;
177 | }
178 | 
179 | caption {
180 |   padding-top: 0.75rem;
181 |   padding-bottom: 0.75rem;
182 |   color: #6c757d;
183 |   text-align: left;
184 |   caption-side: bottom;
185 | }
186 | 
187 | th {
188 |   text-align: inherit;
189 | }
190 | 
191 | label {
192 |   display: inline-block;
193 |   margin-bottom: 0.5rem;
194 | }
195 | 
196 | button {
197 |   border-radius: 0;
198 | }
199 | 
200 | button:focus {
201 |   outline: 1px dotted;
202 |   outline: 5px auto -webkit-focus-ring-color;
203 | }
204 | 
205 | input,
206 | button,
207 | select,
208 | optgroup,
209 | textarea {
210 |   margin: 0;
211 |   font-family: inherit;
212 |   font-size: inherit;
213 |   line-height: inherit;
214 | }
215 | 
216 | button,
217 | input {
218 |   overflow: visible;
219 | }
220 | 
221 | button,
222 | select {
223 |   text-transform: none;
224 | }
225 | 
226 | [role="button"] {
227 |   cursor: pointer;
228 | }
229 | 
230 | select {
231 |   word-wrap: normal;
232 | }
233 | 
234 | button,
235 | [type="button"],
236 | [type="reset"],
237 | [type="submit"] {
238 |   -webkit-appearance: button;
239 | }
240 | 
241 | button:not(:disabled),
242 | [type="button"]:not(:disabled),
243 | [type="reset"]:not(:disabled),
244 | [type="submit"]:not(:disabled) {
245 |   cursor: pointer;
246 | }
247 | 
248 | button::-moz-focus-inner,
249 | [type="button"]::-moz-focus-inner,
250 | [type="reset"]::-moz-focus-inner,
251 | [type="submit"]::-moz-focus-inner {
252 |   padding: 0;
253 |   border-style: none;
254 | }
255 | 
256 | input[type="radio"],
257 | input[type="checkbox"] {
258 |   box-sizing: border-box;
259 |   padding: 0;
260 | }
261 | 
262 | textarea {
263 |   overflow: auto;
264 |   resize: vertical;
265 | }
266 | 
267 | fieldset {
268 |   min-width: 0;
269 |   padding: 0;
270 |   margin: 0;
271 |   border: 0;
272 | }
273 | 
274 | legend {
275 |   display: block;
276 |   width: 100%;
277 |   max-width: 100%;
278 |   padding: 0;
279 |   margin-bottom: .5rem;
280 |   font-size: 1.5rem;
281 |   line-height: inherit;
282 |   color: inherit;
283 |   white-space: normal;
284 | }
285 | 
286 | progress {
287 |   vertical-align: baseline;
288 | }
289 | 
290 | [type="number"]::-webkit-inner-spin-button,
291 | [type="number"]::-webkit-outer-spin-button {
292 |   height: auto;
293 | }
294 | 
295 | [type="search"] {
296 |   outline-offset: -2px;
297 |   -webkit-appearance: none;
298 | }
299 | 
300 | [type="search"]::-webkit-search-decoration {
301 |   -webkit-appearance: none;
302 | }
303 | 
304 | ::-webkit-file-upload-button {
305 |   font: inherit;
306 |   -webkit-appearance: button;
307 | }
308 | 
309 | output {
310 |   display: inline-block;
311 | }
312 | 
313 | summary {
314 |   display: list-item;
315 |   cursor: pointer;
316 | }
317 | 
318 | template {
319 |   display: none;
320 | }
321 | 
322 | [hidden] {
323 |   display: none !important;
324 | }
325 | /*# sourceMappingURL=bootstrap-reboot.css.map */
--------------------------------------------------------------------------------
/bootstrap/css/bootstrap-reboot.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 |  * Bootstrap Reboot v4.5.0 (https://getbootstrap.com/)
3 |  * Copyright 2011-2020 The Bootstrap Authors
4 |  * Copyright 2011-2020 Twitter, Inc.
5 |  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6 |  * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
7 |  */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
8 | /*# sourceMappingURL=bootstrap-reboot.min.css.map */
--------------------------------------------------------------------------------
/bootstrap/css/bootstrap-reboot.min.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["../../scss/bootstrap-reboot.scss","../../scss/_reboot.scss","dist/css/bootstrap-reboot.css","../../scss/vendor/_rfs.scss","bootstrap-reboot.css","../../scss/mixins/_hover.scss"],"names":[],"mappings":"AAAA;;;;;;ACkBA,ECTA,QADA,SDaE,WAAA,WAGF,KACE,YAAA,WACA,YAAA,KACA,yBAAA,KACA,4BAAA,YAMF,QAAA,MAAA,WAAA,OAAA,OAAA,OAAA,OAAA,KAAA,IAAA,QACE,QAAA,MAUF,KACE,OAAA,EACA,YAAA,aAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,WAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,gBAAA,CAAA,iBAAA,CAAA,mBEgFI,UAAA,KF9EJ,YAAA,IACA,YAAA,IACA,MAAA,QACA,WAAA,KACA,iBAAA,KGlBF,0CH+BE,QAAA,YASF,GACE,WAAA,YACA,OAAA,EACA,SAAA,QAaF,GAAA,GAAA,GAAA,GAAA,GAAA,GACE,WAAA,EACA,cAAA,MAOF,EACE,WAAA,EACA,cAAA,KC9CF,0BDyDA,YAEE,gBAAA,UACA,wBAAA,UAAA,OAAA,gBAAA,UAAA,OACA,OAAA,KACA,cAAA,EACA,iCAAA,KAAA,yBAAA,KAGF,QACE,cAAA,KACA,WAAA,OACA,YAAA,QCnDF,GDsDA,GCvDA,GD0DE,WAAA,EACA,cAAA,KAGF,MCtDA,MACA,MAFA,MD2DE,cAAA,EAGF,GACE,YAAA,IAGF,GACE,cAAA,MACA,YAAA,EAGF,WACE,OAAA,EAAA,EAAA,KAGF,ECvDA,ODyDE,YAAA,OAGF,MExFI,UAAA,IFiGJ,IC5DA,ID8DE,SAAA,SEnGE,UAAA,IFqGF,YAAA,EACA,eAAA,SAGF,IAAM,OAAA,OACN,IAAM,IAAA,MAON,EACE,MAAA,QACA,gBAAA,KACA,iBAAA,YIhLA,QJmLE,MAAA,QACA,gBAAA,UASJ,cACE,MAAA,QACA,gBAAA,KI/LA,oBJkME,MAAA,QACA,gBAAA,KC7DJ,KACA,IDqEA,ICpEA,KDwEE,YAAA,cAAA,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,aAAA,CAAA,UEpJE,UAAA,IFwJJ,IAEE,WAAA,EAEA,cAAA,KAEA,SAAA,KAGA,mBAAA,UAQF,OAEE,OAAA,EAAA,EAAA,KAQF,IACE,eAAA,OACA,aAAA,KAGF,IAGE,SAAA,OACA,eAAA,OAQF,MACE,gBAAA,SAGF,QACE,YAAA,OACA,eAAA,OACA,MAAA,QACA,WAAA,KACA,aAAA,OAGF,GAGE,WAAA,QAQF,MAEE,QAAA,aACA,cAAA,MAMF,OAEE,cAAA,EAOF,aACE,QAAA,IAAA,OACA,QAAA,IAAA,KAAA,yBC1GF,OD6GA,MC3GA,SADA,OAEA,SD+GE,OAAA,EACA,YAAA,QExPE,UAAA,QF0PF,YAAA,QAGF,OC7GA,MD+GE,SAAA,QAGF,OC7GA,OD+GE,eAAA,KG7GF,cHoHE,OAAA,QAMF,OACE,UAAA,OChHF,cACA,aACA,cDqHA,OAIE,mBAAA,OCpHF,6BACA,4BACA,6BDuHE,sBAKI,OAAA,QCvHN,gCACA,+BACA,gCD2HA,yBAIE,QAAA,EACA,aAAA,KC1HF,qBD6HA,kBAEE,WAAA,WACA,QAAA,EAIF,SACE,SAAA,KAEA,OAAA,SAGF,SAME,UAAA,EAEA,QAAA,EACA,OAAA,EACA,OAAA,EAKF,OACE,QAAA,MACA,MAAA,KACA,UAAA,KACA,QAAA,EACA,cAAA,ME/RI,UAAA,OFiSJ,YAAA,QACA,MAAA,QACA,YAAA,OAGF,SACE,eAAA,SGvIF,yCFGA,yCD0IE,OAAA,KGxIF,cHgJE,eAAA,KACA,mBAAA,KG5IF,yCHoJE,mBAAA,KAQF,6BACE,KAAA,QACA,mBAAA,OAOF,OACE,QAAA,aAGF,QACE,QAAA,UACA,OAAA,QAGF,SACE,QAAA,KGzJF,SH+JE,QAAA","sourcesContent":["/*!\n * Bootstrap Reboot v4.5.0 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"reboot\";\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box; // 1\n}\n\nhtml {\n  font-family: sans-serif; // 2\n  line-height: 1.15; // 3\n  -webkit-text-size-adjust: 100%; // 4\n  -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n  display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n//    the `inherit` value on things like `
` elements.\n\nbody {\n  margin: 0; // 1\n  font-family: $font-family-base;\n  @include font-size($font-size-base);\n  font-weight: $font-weight-base;\n  line-height: $line-height-base;\n  color: $body-color;\n  text-align: left; // 3\n  background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n  outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n  box-sizing: content-box; // 1\n  height: 0; // 1\n  overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, ``-`` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 0;\n  margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `  `s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n  margin-top: 0;\n  margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n  text-decoration: underline; // 2\n  text-decoration: underline dotted; // 2\n  cursor: help; // 3\n  border-bottom: 0; // 4\n  text-decoration-skip-ink: none; // 5\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: $dt-font-weight;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0; // Undo browser default\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n  @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n  position: relative;\n  @include font-size(75%);\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n  color: $link-color;\n  text-decoration: $link-decoration;\n  background-color: transparent; // Remove the gray background on active links in IE 10.\n\n  @include hover() {\n    color: $link-hover-color;\n    text-decoration: $link-hover-decoration;\n  }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]) {\n  color: inherit;\n  text-decoration: none;\n\n  @include hover() {\n    color: inherit;\n    text-decoration: none;\n  }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: $font-family-monospace;\n  @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n  // Remove browser default top margin\n  margin-top: 0;\n  // Reset browser default of `1em` to use `rem`s\n  margin-bottom: 1rem;\n  // Don't allow content to break outside\n  overflow: auto;\n  // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap,\n  // making it impossible to interact with the content\n  -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n  // Apply a consistent margin strategy (matches our type styles).\n  margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n  vertical-align: middle;\n  border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n  // Workaround for the SVG overflow bug in IE10/11 is still required.\n  // See https://github.com/twbs/bootstrap/issues/26878\n  overflow: hidden;\n  vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n  border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n  padding-top: $table-cell-padding;\n  padding-bottom: $table-cell-padding;\n  color: $table-caption-color;\n  text-align: left;\n  caption-side: bottom;\n}\n\nth {\n  // Matches default `
 ` alignment by inheriting from the ``, or the\n  // closest parent with a set `text-align`.\n  text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n  // Allow labels to use `margin` for spacing.\n  display: inline-block;\n  margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n  // stylelint-disable-next-line property-blacklist\n  border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n  outline: 1px dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0; // Remove the margin in Firefox and Safari\n  font-family: inherit;\n  @include font-size(inherit);\n  line-height: inherit;\n}\n\nbutton,\ninput {\n  overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n  text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Set the cursor for non-`` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n  cursor: pointer;\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n  word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n//    controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n  button,\n  [type=\"button\"],\n  [type=\"reset\"],\n  [type=\"submit\"] {\n    &:not(:disabled) {\n      cursor: pointer;\n    }\n  }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n  padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ntextarea {\n  overflow: auto; // Remove the default vertical scrollbar in IE.\n  // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n  resize: vertical;\n}\n\nfieldset {\n  // Browsers set a default `min-width: min-content;` on fieldsets,\n  // unlike e.g. ``s, which have `min-width: 0;` by default.\n  // So we reset that to ensure fieldsets behave more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359\n  // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n  min-width: 0;\n  // Reset the default outline behavior of fieldsets so they don't affect page layout.\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n  display: block;\n  width: 100%;\n  max-width: 100%; // 1\n  padding: 0;\n  margin-bottom: .5rem;\n  @include font-size(1.5rem);\n  line-height: inherit;\n  color: inherit; // 2\n  white-space: normal; // 1\n}\n\nprogress {\n  vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  // This overrides the extra rounded corners on search inputs in iOS so that our\n  // `.form-control` class can properly style them. Note that this cannot simply\n  // be added to `.form-control` as it's not specific enough. For details, see\n  // https://github.com/twbs/bootstrap/issues/11586.\n  outline-offset: -2px; // 2. Correct the outline style in Safari.\n  -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n  font: inherit; // 2\n  -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n  display: inline-block;\n}\n\nsummary {\n  display: list-item; // Add the correct display in all browsers\n  cursor: pointer;\n}\n\ntemplate {\n  display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n  display: none !important;\n}\n","/*!\n * Bootstrap Reboot v4.5.0 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\nhtml {\n  font-family: sans-serif;\n  line-height: 1.15;\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n  display: block;\n}\n\nbody {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: left;\n  background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n  outline: 0 !important;\n}\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n  overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n  text-decoration: underline;\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  border-bottom: 0;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #007bff;\n  text-decoration: none;\n  background-color: transparent;\n}\n\na:hover {\n  color: #0056b3;\n  text-decoration: underline;\n}\n\na:not([href]) {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  font-size: 1em;\n}\n\npre {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  -ms-overflow-style: scrollbar;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg {\n  vertical-align: middle;\n  border-style: none;\n}\n\nsvg {\n  overflow: hidden;\n  vertical-align: middle;\n}\n\ntable {\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  color: #6c757d;\n  text-align: left;\n  caption-side: bottom;\n}\n\nth {\n  text-align: inherit;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 0.5rem;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus {\n  outline: 1px dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput {\n  overflow: visible;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\n\ntextarea {\n  overflow: auto;\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  max-width: 100%;\n  padding: 0;\n  margin-bottom: .5rem;\n  font-size: 1.5rem;\n  line-height: inherit;\n  color: inherit;\n  white-space: normal;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\ntemplate {\n  display: none;\n}\n\n[hidden] {\n  display: none !important;\n}\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n  @error \"`#{$rfs-factor}` is not a valid  $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n  $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n  $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n  $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n  $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n  // Cache $fs unit\n  $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n  // Add !important suffix if needed\n  $rfs-suffix: if($important, \" !important\", \"\");\n\n  // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n  @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n    font-size: #{$fs}#{$rfs-suffix};\n  }\n  @else {\n    // Variables for storing static and fluid rescaling\n    $rfs-static: null;\n    $rfs-fluid: null;\n\n    // Remove px-unit from $fs for calculations\n    @if $fs-unit == \"px\" {\n      $fs: $fs / ($fs * 0 + 1);\n    }\n    @else if $fs-unit == \"rem\" {\n      $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n    }\n\n    // Set default font-size\n    @if $rfs-font-size-unit == rem {\n      $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n    }\n    @else if $rfs-font-size-unit == px {\n      $rfs-static: #{$fs}px#{$rfs-suffix};\n    }\n    @else {\n      @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n    }\n\n    // Only add media query if font-size is bigger as the minimum font-size\n    // If $rfs-factor == 1, no rescaling will take place\n    @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n      $min-width: null;\n      $variable-unit: null;\n\n      // Calculate minimum font-size for given font-size\n      $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n      // Calculate difference between given font-size and minimum font-size for given font-size\n      $fs-diff: $fs - $fs-min;\n\n      // Base font-size formatting\n      // No need to check if the unit is valid, because we did that before\n      $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n      // If two-dimensional, use smallest of screen width and height\n      $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n      // Calculate the variable width between 0 and $rfs-breakpoint\n      $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n      // Set the calculated font-size.\n      $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n    }\n\n    // Rendering\n    @if $rfs-fluid == null {\n      // Only render static font-size if no fluid font-size is available\n      font-size: $rfs-static;\n    }\n    @else {\n      $mq-value: null;\n\n      // RFS breakpoint formatting\n      @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n        $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n      }\n      @else if $rfs-breakpoint-unit == px {\n        $mq-value: #{$rfs-breakpoint}px;\n      }\n      @else {\n        @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n      }\n\n      @if $rfs-class == \"disable\" {\n        // Adding an extra class increases specificity,\n        // which prevents the media query to override the font size\n        &,\n        .disable-responsive-font-size &,\n        &.disable-responsive-font-size {\n          font-size: $rfs-static;\n        }\n      }\n      @else {\n        font-size: $rfs-static;\n      }\n\n      @if $rfs-two-dimensional {\n        @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n          @if $rfs-class == \"enable\" {\n            .enable-responsive-font-size &,\n            &.enable-responsive-font-size {\n              font-size: $rfs-fluid;\n            }\n          }\n          @else {\n            font-size: $rfs-fluid;\n          }\n\n          @if $rfs-safari-iframe-resize-bug-fix {\n            // stylelint-disable-next-line length-zero-no-unit\n            min-width: 0vw;\n          }\n        }\n      }\n      @else {\n        @media (max-width: #{$mq-value}) {\n          @if $rfs-class == \"enable\" {\n            .enable-responsive-font-size &,\n            &.enable-responsive-font-size {\n              font-size: $rfs-fluid;\n            }\n          }\n          @else {\n            font-size: $rfs-fluid;\n          }\n\n          @if $rfs-safari-iframe-resize-bug-fix {\n            // stylelint-disable-next-line length-zero-no-unit\n            min-width: 0vw;\n          }\n        }\n      }\n    }\n  }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n  @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n  @include rfs($fs, $important);\n}\n","/*!\n * Bootstrap Reboot v4.5.0 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\nhtml {\n  font-family: sans-serif;\n  line-height: 1.15;\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n  display: block;\n}\n\nbody {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: left;\n  background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n  outline: 0 !important;\n}\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n  overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n  text-decoration: underline;\n  text-decoration: underline dotted;\n  cursor: help;\n  border-bottom: 0;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #007bff;\n  text-decoration: none;\n  background-color: transparent;\n}\n\na:hover {\n  color: #0056b3;\n  text-decoration: underline;\n}\n\na:not([href]) {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  font-size: 1em;\n}\n\npre {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  -ms-overflow-style: scrollbar;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg {\n  vertical-align: middle;\n  border-style: none;\n}\n\nsvg {\n  overflow: hidden;\n  vertical-align: middle;\n}\n\ntable {\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  color: #6c757d;\n  text-align: left;\n  caption-side: bottom;\n}\n\nth {\n  text-align: inherit;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 0.5rem;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus {\n  outline: 1px dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput {\n  overflow: visible;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\n\ntextarea {\n  overflow: auto;\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  max-width: 100%;\n  padding: 0;\n  margin-bottom: .5rem;\n  font-size: 1.5rem;\n  line-height: inherit;\n  color: inherit;\n  white-space: normal;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\ntemplate {\n  display: none;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover() {\n  &:hover { @content; }\n}\n\n@mixin hover-focus() {\n  &:hover,\n  &:focus {\n    @content;\n  }\n}\n\n@mixin plain-hover-focus() {\n  &,\n  &:hover,\n  &:focus {\n    @content;\n  }\n}\n\n@mixin hover-focus-active() {\n  &:hover,\n  &:focus,\n  &:active {\n    @content;\n  }\n}\n"]}
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "xwing",
 3 |   "version": "2.5.0",
 4 |   "homepage": "https://github.com/raithos/xwing",
 5 |   "authors": [
 6 |     "Geordan Rosario 
",
 7 |     "Stephen Kim ",
 8 |     "Patrick Mischke "
 9 |   ],
10 |   "description": "(Yet Another) X-Wing Squad Builder",
11 |   "main": "index.html",
12 |   "license": "MIT",
13 |   "private": true,
14 |   "ignore": [
15 |     "**/.*",
16 |     "node_modules",
17 |     "bower_components",
18 |     "test",
19 |     "tests"
20 |   ],
21 |   "dependencies": {
22 |     "select2": "3.5.4",
23 |     "jquery": "components/jquery#~3.5.1",
24 |     "jquery-ui": "1.12.1",
25 |     "jquery-ajaxtransport-xdomainrequest": "~1.0.4",
26 |     "jquery.qrcode": "~0.17.0",
27 |     "font-awesome": "fontawesome#^5.13.0"
28 |   },
29 |   "exportsOverride": {
30 |     "jquery": {
31 |       "js": "**/*.js"
32 |     },
33 |     "jquery-ui": {
34 |       "js": "**/*.js"
35 |     },
36 |     "jquery.qrcode": {
37 |       "js": "**/*.js"
38 |     },
39 |     "font-awesome": {
40 |       "css": "css/*",
41 |       "webfonts": "webfonts/*"
42 |     }
43 |   }
44 | }
45 | 
--------------------------------------------------------------------------------
/coffeescripts/system/rules-browser.coffee:
--------------------------------------------------------------------------------
  1 | ###
  2 |     X-Wing Rules Browser
  3 |     Stephen Kim 
  4 |     https://github.com/raithos/xwing
  5 | ###
  6 | exportObj = exports ? this
  7 | 
  8 | # Assumes cards.js has been loaded
  9 | 
 10 | class exportObj.RulesBrowser
 11 |     constructor: (args) ->
 12 |         # args
 13 |         @container = $ args.container
 14 | 
 15 |         # internals
 16 |         @language = exportObj.currentLanguage ? 'English'
 17 | 
 18 |         @prepareRulesData()
 19 | 
 20 |         @setupRuleUI()
 21 |         @setupRulesHandlers()
 22 | 
 23 |     setupRuleUI: () ->
 24 |         @container.append $.trim """
 25 |             
 26 |                 
 27 |                     
 28 |                         
 29 |                             
 30 |                             
 31 |                                 
 :  
 32 |                                 
 33 |                                      
 34 |                                      
 35 |                                  
 36 |                             
 37 |                             
 38 |                             
 39 |                         
 40 |                     
 41 |                     
 48 |                 
 49 |             
 
 50 |         """
 51 | 
 52 |         @versionlabel = $ @container.find('.xwing-rules-browser .version')
 53 |         @rule_selector_container = $ @container.find('.xwing-rules-browser .rules-container')
 54 |         @rule_viewer_container = $ @container.find('.xwing-rules-browser .card-viewer-container')
 55 |         @rule_viewer_container.hide()
 56 |         @advanced_search_container = $ @container.find('.xwing-rules-browser .advanced-search-container')
 57 | 
 58 |         exportObj.translateUIElements(@container)
 59 | 
 60 |         # TODO: Make added inputs easy accessible
 61 |         
 62 |         version = @all_rules.version.number
 63 |         date = @all_rules.version.date
 64 |         @versionlabel.append "#{version}, #{date}"
 65 | 
 66 |         @rule_search_rules_text = ($ @container.find('.xwing-rules-browser .rule-search-text'))[0]
 67 | 
 68 |     setupRulesHandlers: () ->
 69 |         @renderRulesList()
 70 | 
 71 |         $(window).on 'xwing:afterLanguageLoad', (e, language, cb=$.noop) =>
 72 |             @language = language
 73 |             exportObj.loadRules(language)
 74 |             @prepareRulesData()
 75 |             @renderRulesList()
 76 |         @rule_search_rules_text.oninput = => @renderRulesList()
 77 | 
 78 |     prepareRulesData: () ->
 79 |         @all_rules = exportObj.rulesEntries()
 80 | 
 81 |         @ruletype = [ 'glossary', 'faq' ]
 82 | 
 83 |         
 84 |     renderRulesList: () ->
 85 |         # sort_by is one of `name`, `type-by-name`, `source`, `type-by-points`
 86 |         #
 87 |         # Renders multiselect to container
 88 |         # Selects previously selected rule if there is one
 89 |         @rule_selector.remove() if @rule_selector?
 90 |         @rule_selector = $ document.createElement('SELECT')
 91 |         @rule_selector.addClass 'card-selector'
 92 |         @rule_selector.attr 'size', 25
 93 |         @rule_selector_container.append @rule_selector
 94 |         
 95 |         for type in @ruletype
 96 |             optgroup = $ document.createElement('OPTGROUP')
 97 |             optgroup.attr 'label', exportObj.translate('rulestypes', type)
 98 | 
 99 |             rule_added = false
100 |             for rule_name, rule_data of @all_rules[type]
101 |                 if @checkRulesSearchCriteria rule_data
102 |                     @addRulesTo optgroup, rule_data
103 |                     rule_added = true
104 |             if rule_added
105 |                 @rule_selector.append optgroup
106 |                 
107 |         @rule_selector.change (e) =>
108 |             @renderRules $(@rule_selector.find(':selected'))
109 | 
110 |     renderRules: (rule) ->
111 |         # Renders rule to rule container
112 |         data = 
113 |             name: rule.data 'name'
114 |             text: rule.data 'text'
115 |         orig_type = 'Rules'
116 | 
117 |         @rule_viewer_container.show()
118 |         exportObj.builders[0].showTooltip(orig_type, data, add_opts ? {}, @rule_viewer_container) # we use the render method from the squad builder, cause it works.
119 | 
120 | 
121 |     addRulesTo: (container, rule) ->
122 |         option = $ document.createElement('OPTION')
123 |         option.text "#{rule.name}"
124 |         option.data 'name', rule.name
125 |         option.data 'text', exportObj.fixIcons rule
126 |         $(container).append option
127 | 
128 |     checkRulesSearchCriteria: (rule) ->
129 |         # check for text search
130 |         search_text = @rule_search_rules_text.value.toLowerCase()
131 |         text_search = rule.name.toLowerCase().indexOf(search_text) > -1 or (rule.text and rule.text.toLowerCase().indexOf(search_text)) > -1
132 |         
133 |         if not text_search
134 |             return false
135 |             
136 |         return true
137 | 
--------------------------------------------------------------------------------
/coffeescripts/system/translate.coffee:
--------------------------------------------------------------------------------
  1 | ###
  2 |     X-Wing Squad Builder 2.5
  3 |     Stephen Kim 
  4 |     https://yasb.app
  5 | ###
  6 | 
  7 | DFL_LANGUAGE = 'English' # default language
  8 | 
  9 | SHOW_DEBUG_OUT_MISSING_TRANSLATIONS = false
 10 | 
 11 | builders = []
 12 | 
 13 | exportObj = exports ? this
 14 | 
 15 | # TODO: create a reasonable scope for this (e.g. a translation class), so vars like currentLanguage
 16 | # and methods like translateToLang are not within exportObj scope
 17 | 
 18 | # a language change event will only affect the current language, if it has higher priority than 
 19 | # the current languagePriority.
 20 | # -1: default language
 21 | #  3: browser setting
 22 | #  5: default priority (should not be used by now)
 23 | #  8: parsed from html header (done in backend)
 24 | # 10: backend setting
 25 | # 100: manual selection
 26 | exportObj.languagePriority = -1
 27 | 
 28 | # try to set the current language according to the users choice
 29 | try
 30 |   (()->
 31 |     # we'll guess language from browser settings - unless a better choice has already been made
 32 |     if exportObj.languagePriority > 3
 33 |         return
 34 |     exportObj.currentLanguage = DFL_LANGUAGE
 35 |     if exportObj.languagePriority == -1
 36 |         return
 37 |     # some browses just provide a single navigator.language, some provide an array navigator.languages 
 38 |     languageCodes = [navigator.language].concat(navigator.languages)
 39 |     for langc in languageCodes
 40 |         # strip stuff like -US from en-US
 41 |         langc = langc.split('-')[0]
 42 |         if langc of exportObj.codeToLanguage
 43 |             # assume that exportObj already exists. If it does not, we don't know which languages YASB supports
 44 |             exportObj.currentLanguage = exportObj.codeToLanguage[langc]
 45 |             # we successfully found a language the user is somewhat happy with. that's cool
 46 |             exportObj.languagePriority = 3
 47 |             break
 48 |    )()
 49 | catch all
 50 |     exportObj.currentLanguage = DFL_LANGUAGE
 51 |     # throw all
 52 |     
 53 | 
 54 | exportObj.loadCards = (language) ->
 55 |     exportObj.cardLoaders[language]()
 56 | 
 57 | exportObj.loadRules = (language) ->
 58 |     # console.log("Loading rules:")
 59 |     # console.log(language)
 60 |     if language of exportObj.ruleLoaders
 61 |         # console.log("Rules exist")
 62 |         if exportObj.rulesLang != language
 63 |             # console.log("Not already active, currently was")
 64 |             # console.log(exportObj.rulesLang)
 65 |             exportObj.ruleLoaders[language]()
 66 |             exportObj.rulesLang = language
 67 |         return true
 68 |     else
 69 |         # console.log("Load default instead")
 70 |         if exportObj.rulesLang != DFL_LANGUAGE
 71 |             # console.log("Not already active")
 72 |             exportObj.ruleLoaders[DFL_LANGUAGE]()
 73 |             exportObj.rulesLang = DFL_LANGUAGE
 74 |         return false
 75 | 
 76 | exportObj.translate = (category, what, args...) -> 
 77 |     exportObj.translateToLang(exportObj.currentLanguage, category, what, args...)
 78 | 
 79 | # this method should be somewhat private, and not be called outside this file
 80 | exportObj.translateToLang = (language, category, what, args...) ->
 81 |     try
 82 |         translation = exportObj.translations[language][category][what]
 83 |     catch all
 84 |         # well, guess something went wrong - most likely some translation did not exist in the
 85 |         # current language. If that isn't the default language, we'll try that next in belows else block
 86 |         # otherwise we just use whatever is the in-code text of the requested translation.
 87 |         # Anyway, we want to keep running, so better catch that exception and keep going...
 88 |         translation = undefined
 89 |     if translation?
 90 |         if translation instanceof Function
 91 |             # pass this function in case we need to do further translation inside the function
 92 |             translation exportObj.translate, args...
 93 |         else
 94 |             translation
 95 |     else
 96 |         if language != DFL_LANGUAGE
 97 |             if SHOW_DEBUG_OUT_MISSING_TRANSLATIONS
 98 |                 console.log(language + ' translation for ' + String(what) + ' (category ' + String(category) + ') missing')
 99 |             exportObj.translateToLang DFL_LANGUAGE, category, what, args...
100 |         else
101 |             what
102 | 
103 | exportObj.setupTranslationSupport = ->
104 |     do (builders) ->
105 |         $(exportObj).on 'xwing:languageChanged', (e, language, priority=5, cb=$.noop) =>
106 |             # check if priority is high enough to do anything
107 |             if priority == 'reload' # special case - just a reload, no priority change
108 |                 null
109 |             # check if a better choice than the requested one has already been made
110 |             else if priority < exportObj.languagePriority
111 |                 return
112 |             else
113 |                 exportObj.languagePriority = priority
114 |                 exportObj.currentLanguage = language
115 |             if language of exportObj.translations
116 |                 $('.language-placeholder').text language
117 |                 current_language = ""
118 |                 builders_before = []
119 |                 for builder in builders
120 |                     current_language = builder.language
121 |                     builders_before.push new Promise((resolve,reject) => builder.container.trigger 'xwing:beforeLanguageLoad', resolve)
122 |                 await Promise.all builders_before
123 |                 if language != current_language
124 |                     exportObj.loadCards language
125 |                 exportObj.translateUIElements()
126 |                 for builder in builders
127 |                     builder.container.trigger 'xwing:afterLanguageLoad', language
128 | 
129 |     # Load cards one time
130 |     basic_cards = exportObj.basicCardData()
131 |     quick_builds = exportObj.basicQuickBuilds()
132 |     exportObj.canonicalizeShipNames basic_cards
133 |     exportObj.ships = basic_cards.ships
134 | 
135 |     # Set up the common card data (e.g. stats)
136 |     exportObj.setupCommonCardData basic_cards
137 |     exportObj.setupQuickBuilds quick_builds
138 | 
139 |     # do we need to load dfl as well? Not sure...
140 |     exportObj.loadCards DFL_LANGUAGE
141 |     exportObj.loadRules exportObj.currentLanguage
142 |     if DFL_LANGUAGE != exportObj.currentLanguage
143 |         exportObj.loadCards exportObj.currentLanguage 
144 |     $(exportObj).trigger 'xwing:languageChanged', [exportObj.currentLanguage, 'reload']
145 | 
146 | exportObj.translateUIElements = (context=undefined) ->
147 |     # translate all UI elements that are marked as translateable
148 |     for translateableNode in $('.translated', context)
149 |         translateableNode.innerHTML = (exportObj.translate('ui', translateableNode.getAttribute('defaultText')))
150 | 
151 | exportObj.setupTranslationUI = (backend) ->
152 |     for language in Object.keys(exportObj.cardLoaders).sort()
153 |         li = $ document.createElement 'LI'
154 |         li.text language
155 |         do (language, backend) ->
156 |             li.click (e) ->
157 |                 backend.set('language', language) if backend?
158 |                 # setting a language manually has pretty high priority
159 |                 $(exportObj).trigger 'xwing:languageChanged', [ language, 100 ]
160 |         $('.language-picker .dropdown-menu').append li
161 | 
162 | exportObj.registerBuilderForTranslation = (builder) ->
163 |     builders.push(builder) if builder not in builders
164 | 
--------------------------------------------------------------------------------
/coffeescripts/system/xws.coffee:
--------------------------------------------------------------------------------
 1 | exportObj = exports ? this
 2 | 
 3 | exportObj.fromXWSFaction =
 4 |     'rebelalliance': 'Rebel Alliance'
 5 |     'rebels': 'Rebel Alliance'
 6 |     'rebel': 'Rebel Alliance'
 7 |     'galacticempire': 'Galactic Empire'
 8 |     'imperial': 'Galactic Empire'
 9 |     'scumandvillainy': 'Scum and Villainy'
10 |     'firstorder': 'First Order'
11 |     'resistance': 'Resistance'
12 |     'galacticrepublic': 'Galactic Republic'
13 |     'separatistalliance': 'Separatist Alliance'
14 | 
15 | exportObj.toXWSFaction =
16 |     'Rebel Alliance': 'rebelalliance'
17 |     'Galactic Empire': 'galacticempire'
18 |     'Scum and Villainy': 'scumandvillainy'
19 |     'First Order': 'firstorder'
20 |     'Resistance': 'resistance'
21 |     'Galactic Republic': 'galacticrepublic'
22 |     'Separatist Alliance': 'separatistalliance'
23 | 
24 | exportObj.toXWSUpgrade =
25 |     'Modification': 'modification'
26 |     'Force':'force-power'
27 |     'Tactical Relay':'tactical-relay'
28 | 
29 | exportObj.fromXWSUpgrade =
30 |     'amd': 'Astromech'
31 |     'astromechdroid': 'Astromech'
32 |     'ept': 'Talent'
33 |     'elitepilottalent': 'Talent'
34 |     'system': 'Sensor'
35 |     'mod': 'Modification'
36 |     'force-power':'Force'
37 |     'tactical-relay':'Tactical Relay'
38 | 
39 | SPEC_URL = 'https://github.com/elistevens/xws-spec'
40 | SQUAD_TO_XWS_URL = 'https://squad2xws.herokuapp.com/translate/'
41 | 
42 | exportObj.loadXWSButton = (xws_import_modal) ->
43 |         import_status = $ xws_import_modal.find('.xws-import-status')
44 |         import_status.text exportObj.translate('ui', 'Loading...')
45 |         do (import_status) =>
46 |             loadxws = (xws) =>
47 |                 $(window).trigger 'xwing:activateBuilder', [exportObj.fromXWSFaction[xws.faction], (builder) =>
48 |                     if builder.current_squad.dirty and builder.backend?
49 |                         xws_import_modal.modal 'hide'
50 |                         builder.backend.warnUnsaved builder, =>
51 |                             builder.loadFromXWS xws, (res) =>
52 |                                 unless res.success
53 |                                     xws_import_modal.modal 'show'
54 |                                     import_status.text res.error
55 |                     else
56 |                         builder.loadFromXWS xws, (res) =>
57 |                             if res.success
58 |                                 xws_import_modal.modal 'hide'
59 |                             else
60 |                                 import_status.text res.error
61 |                 ]
62 | 
63 |             input = xws_import_modal.find('.xws-content').val()
64 |             try
65 |                 # try if we got a JSON input
66 |                 xws = JSON.parse input
67 |                 loadxws(xws)
68 |             catch e
69 |                 # we did not get JSON. Maybe we got an official builder link/uid
70 |                 # strip everything before the last /
71 |                 uuid = input.split('/').pop()
72 |                 jsonurl = SQUAD_TO_XWS_URL + uuid
73 |                 # let squad2xws create an xws for us and read this
74 |                 ($.getJSON jsonurl, loadxws).catch((e) => import_status.text 'Invalid Input')
75 | 
--------------------------------------------------------------------------------
/fontawesome:
--------------------------------------------------------------------------------
1 | FortAwesome-Font-Awesome-13d5dd3
--------------------------------------------------------------------------------
/fonts/Bank Gothic Medium BT.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/fonts/Bank Gothic Medium BT.ttf
--------------------------------------------------------------------------------
/fonts/EurostileLTStd-Bold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/fonts/EurostileLTStd-Bold.otf
--------------------------------------------------------------------------------
/fonts/EurostileLTStd-BoldCn.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/fonts/EurostileLTStd-BoldCn.otf
--------------------------------------------------------------------------------
/fonts/EurostileLTStd-BoldEx2.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/fonts/EurostileLTStd-BoldEx2.otf
--------------------------------------------------------------------------------
/fonts/EurostileLTStd-BoldOblique.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/fonts/EurostileLTStd-BoldOblique.otf
--------------------------------------------------------------------------------
/fonts/EurostileLTStd-Cn.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/fonts/EurostileLTStd-Cn.otf
--------------------------------------------------------------------------------
/fonts/EurostileLTStd-Demi.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/fonts/EurostileLTStd-Demi.otf
--------------------------------------------------------------------------------
/fonts/EurostileLTStd-DemiOblique.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/fonts/EurostileLTStd-DemiOblique.otf
--------------------------------------------------------------------------------
/fonts/EurostileLTStd-Ex2.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/fonts/EurostileLTStd-Ex2.otf
--------------------------------------------------------------------------------
/fonts/EurostileLTStd-Oblique.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/fonts/EurostileLTStd-Oblique.otf
--------------------------------------------------------------------------------
/fonts/EurostileLTStd.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/fonts/EurostileLTStd.otf
--------------------------------------------------------------------------------
/fonts/bankgthd.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/fonts/bankgthd.ttf
--------------------------------------------------------------------------------
/fonts/kimberley bl.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/fonts/kimberley bl.ttf
--------------------------------------------------------------------------------
/fonts/xwing-miniatures-ships.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/fonts/xwing-miniatures-ships.ttf
--------------------------------------------------------------------------------
/fonts/xwing-miniatures.css:
--------------------------------------------------------------------------------
  1 | @charset "UTF-8";
  2 | /*
  3 |  * Icons
  4 |  */
  5 | @font-face {
  6 |   font-family: XWing;
  7 |   src: url("xwing-miniatures.ttf"); }
  8 | 
  9 | i.xwing-miniatures-font {
 10 |   font-family: XWing;
 11 |   font-style: normal;
 12 |   font-size: 1.5em; }
 13 | 
 14 | i.xwing-miniatures-font-agility:before {
 15 |   content: "^"; }
 16 | 
 17 | i.xwing-miniatures-font-astromech:before {
 18 |   content: "A"; }
 19 | 
 20 | i.xwing-miniatures-font-attack:before {
 21 |   content: "%"; }
 22 | 
 23 | i.xwing-miniatures-font-bankleft:before {
 24 |   content: "7"; }
 25 | 
 26 | i.xwing-miniatures-font-bankright:before {
 27 |   content: "9"; }
 28 | 
 29 | i.xwing-miniatures-font-barrelroll:before {
 30 |   content: "r"; }
 31 | 
 32 | i.xwing-miniatures-font-base-all:before {
 33 |   content: "À"; }
 34 | 
 35 | i.xwing-miniatures-font-base-small:before {
 36 |   content: "Á"; }
 37 | 
 38 | i.xwing-miniatures-font-base-medium:before {
 39 |   content: "Â"; }
 40 | 
 41 | i.xwing-miniatures-font-base-large:before {
 42 |   content: "Ã"; }
 43 | 
 44 | i.xwing-miniatures-font-boost:before {
 45 |   content: "b"; }
 46 | 
 47 | i.xwing-miniatures-font-bullseyearc:before {
 48 |   content: "}"; }
 49 | 
 50 | i.xwing-miniatures-font-calculate:before {
 51 |   content: "a"; }
 52 | 
 53 | i.xwing-miniatures-font-cannon:before {
 54 |   content: "C"; }
 55 | 
 56 | i.xwing-miniatures-font-cargo:before {
 57 |   content: "G"; }
 58 | 
 59 | i.xwing-miniatures-font-charge:before {
 60 |   content: "g"; }
 61 | 
 62 | i.xwing-miniatures-font-cloak:before {
 63 |   content: "k"; }
 64 | 
 65 | i.xwing-miniatures-font-command:before {
 66 |   content: "V"; }
 67 | 
 68 | i.xwing-miniatures-font-condition-outline:before {
 69 |   content: "Æ"; }
 70 | 
 71 | i.xwing-miniatures-font-condition:before {
 72 |   content: "°"; }
 73 | 
 74 | i.xwing-miniatures-font-config:before {
 75 |   content: "n"; }
 76 | 
 77 | i.xwing-miniatures-font-coordinate:before {
 78 |   content: "o"; }
 79 | 
 80 | i.xwing-miniatures-font-crew:before {
 81 |   content: "W"; }
 82 | 
 83 | i.xwing-miniatures-font-crit:before {
 84 |   content: "c"; }
 85 | 
 86 | i.xwing-miniatures-font-dalan-bankleft:before {
 87 |   content: "["; }
 88 | 
 89 | i.xwing-miniatures-font-dalan-bankright:before {
 90 |   content: "]"; }
 91 | 
 92 | i.xwing-miniatures-font-device:before {
 93 |   content: "B"; }
 94 | 
 95 | i.xwing-miniatures-font-doublerecurring:before {
 96 |   content: "_"; }
 97 | 
 98 | i.xwing-miniatures-font-doubleturretarc:before {
 99 |   content: "q"; }
100 | 
101 | i.xwing-miniatures-font-empire:before {
102 |   content: "@"; }
103 | 
104 | i.xwing-miniatures-font-energy:before {
105 |   content: "("; }
106 | 
107 | i.xwing-miniatures-font-epic:before {
108 |   content: ")"; }
109 | 
110 | i.xwing-miniatures-font-evade:before {
111 |   content: "e"; }
112 | 
113 | i.xwing-miniatures-font-firstorder:before {
114 |   content: "+"; }
115 | 
116 | i.xwing-miniatures-font-first-player-1-outline:before {
117 |   content: "Ĺ"; }
118 | 
119 | i.xwing-miniatures-font-first-player-1:before {
120 |   content: "ĺ"; }
121 | 
122 | i.xwing-miniatures-font-first-player-2-outline:before {
123 |   content: "Ļ"; }
124 | 
125 | i.xwing-miniatures-font-first-player-2:before {
126 |   content: "ļ"; }
127 | 
128 | i.xwing-miniatures-font-first-player-3-outline:before {
129 |   content: "Ľ"; }
130 | 
131 | i.xwing-miniatures-font-first-player-3:before {
132 |   content: "ľ"; }
133 | 
134 | i.xwing-miniatures-font-first-player-4-outline:before {
135 |   content: "Ŀ"; }
136 | 
137 | i.xwing-miniatures-font-first-player-4:before {
138 |   content: "ŀ"; }
139 | 
140 | i.xwing-miniatures-font-focus:before {
141 |   content: "f"; }
142 | 
143 | i.xwing-miniatures-font-forcecharge:before {
144 |   content: "h"; }
145 | 
146 | i.xwing-miniatures-font-forcepower:before {
147 |   content: "F"; }
148 | 
149 | i.xwing-miniatures-font-frontarc:before {
150 |   content: "{"; }
151 | 
152 | i.xwing-miniatures-font-fullfrontarc:before {
153 |   content: "~"; }
154 | 
155 | i.xwing-miniatures-font-fullreararc:before {
156 |   content: "¡"; }
157 | 
158 | i.xwing-miniatures-font-fuse:before {
159 |   content: ","; }
160 | 
161 | i.xwing-miniatures-font-gunner:before {
162 |   content: "Y"; }
163 | 
164 | i.xwing-miniatures-font-hardpoint:before {
165 |   content: "H"; }
166 | 
167 | i.xwing-miniatures-font-helmet-imperial:before {
168 |   content: "y"; }
169 | 
170 | i.xwing-miniatures-font-helmet-rebel:before {
171 |   content: "x"; }
172 | 
173 | i.xwing-miniatures-font-helmet-scum:before {
174 |   content: "z"; }
175 | 
176 | i.xwing-miniatures-font-hit:before {
177 |   content: "d"; }
178 | 
179 | i.xwing-miniatures-font-hull:before {
180 |   content: "&"; }
181 | 
182 | i.xwing-miniatures-font-ig88d-sloopleft:before {
183 |   content: '"'; }
184 | 
185 | i.xwing-miniatures-font-ig88d-sloopright:before {
186 |   content: "'"; }
187 | 
188 | i.xwing-miniatures-font-illicit:before {
189 |   content: "I"; }
190 | 
191 | i.xwing-miniatures-font-jam:before {
192 |   content: "j"; }
193 | 
194 | i.xwing-miniatures-font-kturn:before {
195 |   content: "2"; }
196 | 
197 | i.xwing-miniatures-font-leftarc:before {
198 |   content: "£"; }
199 | 
200 | i.xwing-miniatures-font-linked:before {
201 |   content: ">"; }
202 | 
203 | i.xwing-miniatures-font-lock:before {
204 |   content: "l"; }
205 | 
206 | i.xwing-miniatures-font-missile:before {
207 |   content: "M"; }
208 | 
209 | i.xwing-miniatures-font-modification:before {
210 |   content: "m"; }
211 | 
212 | i.xwing-miniatures-font-negativerecurring:before {
213 |   content: ""; }
214 | 
215 | i.xwing-miniatures-font-obstacle-core2asteroid0-outline:before {
216 |   content: "ĉ"; }
217 | 
218 | i.xwing-miniatures-font-obstacle-core2asteroid0:before {
219 |   content: "ĥ"; }
220 | 
221 | i.xwing-miniatures-font-obstacle-core2asteroid1-outline:before {
222 |   content: "Č"; }
223 | 
224 | i.xwing-miniatures-font-obstacle-core2asteroid1:before {
225 |   content: "Ĩ"; }
226 | 
227 | i.xwing-miniatures-font-obstacle-core2asteroid2-outline:before {
228 |   content: "Ċ"; }
229 | 
230 | i.xwing-miniatures-font-obstacle-core2asteroid2:before {
231 |   content: "Ħ"; }
232 | 
233 | i.xwing-miniatures-font-obstacle-core2asteroid3-outline:before {
234 |   content: "ċ"; }
235 | 
236 | i.xwing-miniatures-font-obstacle-core2asteroid3:before {
237 |   content: "ħ"; }
238 | 
239 | i.xwing-miniatures-font-obstacle-core2asteroid4-outline:before {
240 |   content: "č"; }
241 | 
242 | i.xwing-miniatures-font-obstacle-core2asteroid4:before {
243 |   content: "ĩ"; }
244 | 
245 | i.xwing-miniatures-font-obstacle-core2asteroid5-outline:before {
246 |   content: "Ď"; }
247 | 
248 | i.xwing-miniatures-font-obstacle-core2asteroid5:before {
249 |   content: "Ī"; }
250 | 
251 | i.xwing-miniatures-font-obstacle-coreasteroid0-outline:before {
252 |   content: "Ă"; }
253 | 
254 | i.xwing-miniatures-font-obstacle-coreasteroid0:before {
255 |   content: "Ğ"; }
256 | 
257 | i.xwing-miniatures-font-obstacle-coreasteroid1-outline:before {
258 |   content: "ă"; }
259 | 
260 | i.xwing-miniatures-font-obstacle-coreasteroid1:before {
261 |   content: "ğ"; }
262 | 
263 | i.xwing-miniatures-font-obstacle-coreasteroid2-outline:before {
264 |   content: "ā"; }
265 | 
266 | i.xwing-miniatures-font-obstacle-coreasteroid2:before {
267 |   content: "ĝ"; }
268 | 
269 | i.xwing-miniatures-font-obstacle-coreasteroid3-outline:before {
270 |   content: "ą"; }
271 | 
272 | i.xwing-miniatures-font-obstacle-coreasteroid3:before {
273 |   content: "ġ"; }
274 | 
275 | i.xwing-miniatures-font-obstacle-coreasteroid4-outline:before {
276 |   content: "Ą"; }
277 | 
278 | i.xwing-miniatures-font-obstacle-coreasteroid4:before {
279 |   content: "Ġ"; }
280 | 
281 | i.xwing-miniatures-font-obstacle-coreasteroid5-outline:before {
282 |   content: "Ā"; }
283 | 
284 | i.xwing-miniatures-font-obstacle-coreasteroid5:before {
285 |   content: "Ĝ"; }
286 | 
287 | i.xwing-miniatures-font-obstacle-vt49decimatordebris0-outline:before {
288 |   content: "Đ"; }
289 | 
290 | i.xwing-miniatures-font-obstacle-vt49decimatordebris0:before {
291 |   content: "Ĭ"; }
292 | 
293 | i.xwing-miniatures-font-obstacle-vt49decimatordebris1-outline:before {
294 |   content: "đ"; }
295 | 
296 | i.xwing-miniatures-font-obstacle-vt49decimatordebris1:before {
297 |   content: "ĭ"; }
298 | 
299 | i.xwing-miniatures-font-obstacle-vt49decimatordebris2-outline:before {
300 |   content: "ć"; }
301 | 
302 | i.xwing-miniatures-font-obstacle-vt49decimatordebris2:before {
303 |   content: "ģ"; }
304 | 
305 | i.xwing-miniatures-font-obstacle-yt2400debris0-outline:before {
306 |   content: "ď"; }
307 | 
308 | i.xwing-miniatures-font-obstacle-yt2400debris0:before {
309 |   content: "ī"; }
310 | 
311 | i.xwing-miniatures-font-obstacle-yt2400debris1-outline:before {
312 |   content: "Ĉ"; }
313 | 
314 | i.xwing-miniatures-font-obstacle-yt2400debris1:before {
315 |   content: "Ĥ"; }
316 | 
317 | i.xwing-miniatures-font-obstacle-yt2400debris2-outline:before {
318 |   content: "Ć"; }
319 | 
320 | i.xwing-miniatures-font-obstacle-yt2400debris2:before {
321 |   content: "Ģ"; }
322 | 
323 | i.xwing-miniatures-font-obstacle-gascloud1:before {
324 |   content: "Į"; }
325 | 
326 | i.xwing-miniatures-font-obstacle-gascloud1-outline:before {
327 |   content: "Ē"; }
328 | 
329 | i.xwing-miniatures-font-obstacle-gascloud2:before {
330 |   content: "į"; }
331 | 
332 | i.xwing-miniatures-font-obstacle-gascloud2-outline:before {
333 |   content: "ē"; }
334 | 
335 | i.xwing-miniatures-font-obstacle-gascloud3:before {
336 |   content: "İ"; }
337 | 
338 | i.xwing-miniatures-font-obstacle-gascloud3-outline:before {
339 |   content: "Ĕ"; }
340 | 
341 | i.xwing-miniatures-font-obstacle-gascloud4:before {
342 |   content: "ı"; }
343 | 
344 | i.xwing-miniatures-font-obstacle-gascloud4-outline:before {
345 |   content: "ĕ"; }
346 | 
347 | i.xwing-miniatures-font-obstacle-gascloud5:before {
348 |   content: "IJ"; }
349 | 
350 | i.xwing-miniatures-font-obstacle-gascloud5-outline:before {
351 |   content: "Ė"; }
352 | 
353 | i.xwing-miniatures-font-obstacle-gascloud6:before {
354 |   content: "ij"; }
355 | 
356 | i.xwing-miniatures-font-obstacle-gascloud6-outline:before {
357 |   content: "ė"; }
358 | 
359 | i.xwing-miniatures-font-point:before {
360 |   content: "Ì"; }
361 | 
362 | i.xwing-miniatures-font-rangebonusindicator:before {
363 |   content: "?"; }
364 | 
365 | i.xwing-miniatures-font-reararc:before {
366 |   content: "|"; }
367 | 
368 | i.xwing-miniatures-font-rebel-outline:before {
369 |   content: "-"; }
370 | 
371 | i.xwing-miniatures-font-rebel:before {
372 |   content: "!"; }
373 | 
374 | i.xwing-miniatures-font-recover:before {
375 |   content: "v"; }
376 | 
377 | i.xwing-miniatures-font-recurring:before {
378 |   content: "`"; }
379 | 
380 | i.xwing-miniatures-font-reinforce:before {
381 |   content: "i"; }
382 | 
383 | i.xwing-miniatures-font-reload:before {
384 |   content: "="; }
385 | 
386 | i.xwing-miniatures-font-republic:before {
387 |   content: "/"; }
388 | 
389 | i.xwing-miniatures-font-reversebankleft:before {
390 |   content: "J"; }
391 | 
392 | i.xwing-miniatures-font-reversebankright:before {
393 |   content: "L"; }
394 | 
395 | i.xwing-miniatures-font-reversestraight:before {
396 |   content: "K"; }
397 | 
398 | i.xwing-miniatures-font-rightarc:before {
399 |   content: "¢"; }
400 | 
401 | i.xwing-miniatures-font-rotatearc:before {
402 |   content: "R"; }
403 | 
404 | i.xwing-miniatures-font-scum:before {
405 |   content: "#"; }
406 | 
407 | i.xwing-miniatures-font-separatists:before {
408 |   content: "."; }
409 | 
410 | i.xwing-miniatures-font-sensor:before {
411 |   content: "S"; }
412 | 
413 | i.xwing-miniatures-font-shield:before {
414 |   content: "*"; }
415 | 
416 | i.xwing-miniatures-font-singleturretarc:before {
417 |   content: "p"; }
418 | 
419 | i.xwing-miniatures-font-slam:before {
420 |   content: "s"; }
421 | 
422 | i.xwing-miniatures-font-sloopleft:before {
423 |   content: "1"; }
424 | 
425 | i.xwing-miniatures-font-sloopright:before {
426 |   content: "3"; }
427 | 
428 | i.xwing-miniatures-font-squad-point-cost:before {
429 |   content: "0"; }
430 | 
431 | i.xwing-miniatures-font-stop:before {
432 |   content: "5"; }
433 | 
434 | i.xwing-miniatures-font-straight:before {
435 |   content: "8"; }
436 | 
437 | i.xwing-miniatures-font-tacticalrelay:before {
438 |   content: "Z"; }
439 | 
440 | i.xwing-miniatures-font-talent:before {
441 |   content: "E"; }
442 | 
443 | i.xwing-miniatures-font-team:before {
444 |   content: "T"; }
445 | 
446 | i.xwing-miniatures-font-tech:before {
447 |   content: "X"; }
448 | 
449 | i.xwing-miniatures-font-title:before {
450 |   content: "t"; }
451 | 
452 | i.xwing-miniatures-font-token-calculate-outline:before {
453 |   content: "Ë"; }
454 | 
455 | i.xwing-miniatures-font-token-calculate:before {
456 |   content: "Ê"; }
457 | 
458 | i.xwing-miniatures-font-token-charge-outline:before {
459 |   content: "Ó"; }
460 | 
461 | i.xwing-miniatures-font-token-charge:before {
462 |   content: "Ò"; }
463 | 
464 | i.xwing-miniatures-font-token-crit-outline:before {
465 |   content: "è"; }
466 | 
467 | i.xwing-miniatures-font-token-crit:before {
468 |   content: "Ç"; }
469 | 
470 | i.xwing-miniatures-font-token-cloak-outline:before {
471 |   content: "ô"; }
472 | 
473 | i.xwing-miniatures-font-token-cloak:before {
474 |   content: "å"; }
475 | 
476 | i.xwing-miniatures-font-token-deplete-outline:before {
477 |   content: "÷"; }
478 | 
479 | i.xwing-miniatures-font-token-deplete:before {
480 |   content: "ø"; }
481 | 
482 | i.xwing-miniatures-font-token-evade-outline:before {
483 |   content: "é"; }
484 | 
485 | i.xwing-miniatures-font-token-evade:before {
486 |   content: "Å"; }
487 | 
488 | i.xwing-miniatures-font-token-focus-outline:before {
489 |   content: "ç"; }
490 | 
491 | i.xwing-miniatures-font-token-focus:before {
492 |   content: "Ä"; }
493 | 
494 | i.xwing-miniatures-font-token-force-outline:before {
495 |   content: "Õ"; }
496 | 
497 | i.xwing-miniatures-font-token-force:before {
498 |   content: "Ô"; }
499 | 
500 | i.xwing-miniatures-font-token-disarm-outline:before {
501 |   content: "í"; }
502 | 
503 | i.xwing-miniatures-font-token-disarm:before {
504 |   content: "Ö"; }
505 | 
506 | i.xwing-miniatures-font-token-ion-outline:before {
507 |   content: "ó"; }
508 | 
509 | i.xwing-miniatures-font-token-ion:before {
510 |   content: "ä"; }
511 | 
512 | i.xwing-miniatures-font-token-jam-outline:before {
513 |   content: "ð"; }
514 | 
515 | i.xwing-miniatures-font-token-jam:before {
516 |   content: "á"; }
517 | 
518 | i.xwing-miniatures-font-token-lock-outline:before {
519 |   content: "ò"; }
520 | 
521 | i.xwing-miniatures-font-token-lock:before {
522 |   content: "ã"; }
523 | 
524 | i.xwing-miniatures-font-token-point-1-outline:before {
525 |   content: "Î"; }
526 | 
527 | i.xwing-miniatures-font-token-point-1:before {
528 |   content: "Ð"; }
529 | 
530 | i.xwing-miniatures-font-token-point-3-outline:before {
531 |   content: "Í"; }
532 | 
533 | i.xwing-miniatures-font-token-point-3:before {
534 |   content: "Ï"; }
535 | 
536 | i.xwing-miniatures-font-token-reinforce-outline:before {
537 |   content: "ì"; }
538 | 
539 | i.xwing-miniatures-font-token-reinforce:before {
540 |   content: "Ü"; }
541 | 
542 | i.xwing-miniatures-font-token-reinforceaft-outline:before {
543 |   content: "î"; }
544 | 
545 | i.xwing-miniatures-font-token-reinforceaft:before {
546 |   content: "Ý"; }
547 | 
548 | i.xwing-miniatures-font-token-shield-outline:before {
549 |   content: "ë"; }
550 | 
551 | i.xwing-miniatures-font-token-shield:before {
552 |   content: "Ñ"; }
553 | 
554 | i.xwing-miniatures-font-token-strain-outline:before {
555 |   content: "õ"; }
556 | 
557 | i.xwing-miniatures-font-token-strain:before {
558 |   content: "ö"; }
559 | 
560 | i.xwing-miniatures-font-token-stress-outline:before {
561 |   content: "ê"; }
562 | 
563 | i.xwing-miniatures-font-token-stress:before {
564 |   content: "É"; }
565 | 
566 | i.xwing-miniatures-font-token-tractor-outline:before {
567 |   content: "ï"; }
568 | 
569 | i.xwing-miniatures-font-token-tractor:before {
570 |   content: "à"; }
571 | 
572 | i.xwing-miniatures-font-torpedo:before {
573 |   content: "P"; }
574 | 
575 | i.xwing-miniatures-font-triplerecurring:before {
576 |   content: ""; }
577 | 
578 | i.xwing-miniatures-font-trollleft:before {
579 |   content: ":"; }
580 | 
581 | i.xwing-miniatures-font-trollright:before {
582 |   content: ";"; }
583 | 
584 | i.xwing-miniatures-font-turnleft:before {
585 |   content: "4"; }
586 | 
587 | i.xwing-miniatures-font-turnright:before {
588 |   content: "6"; }
589 | 
590 | i.xwing-miniatures-font-turret:before {
591 |   content: "U"; }
592 | 
593 | i.xwing-miniatures-font-unique-outline:before {
594 |   content: "•"; }
595 | 
596 | i.xwing-miniatures-font-unique:before {
597 |   content: "u"; }
598 | 
599 | /*
600 |  * Ships
601 |  */
602 | @font-face {
603 |   font-family: XWingShip;
604 |   src: url("xwing-miniatures-ships.ttf"); }
605 | 
606 | i.xwing-miniatures-ship {
607 |   font-family: XWingShip;
608 |   font-style: normal;
609 |   font-size: 1.5em; }
610 | 
611 | i.xwing-miniatures-ship-aggressorassaultfighter:before {
612 |   content: "i"; }
613 | 
614 | i.xwing-miniatures-ship-alphaclassstarwing:before {
615 |   content: "&"; }
616 | 
617 | i.xwing-miniatures-ship-arc170starfighter:before {
618 |   content: "c"; }
619 | 
620 | i.xwing-miniatures-ship-asf01bwing:before {
621 |   content: "b"; }
622 | 
623 | i.xwing-miniatures-ship-attackshuttle:before {
624 |   content: "g"; }
625 | 
626 | i.xwing-miniatures-ship-auzituckgunship:before {
627 |   content: "@"; }
628 | 
629 | i.xwing-miniatures-ship-belbullab22starfighter:before {
630 |   content: "["; }
631 | 
632 | i.xwing-miniatures-ship-btla4ywing:before {
633 |   content: "y"; }
634 | 
635 | i.xwing-miniatures-ship-btlbywing:before {
636 |   content: ":"; }
637 | 
638 | i.xwing-miniatures-ship-btanr2ywing:before {
639 |   content: "{"; }
640 | 
641 | i.xwing-miniatures-ship-btls8kwing:before {
642 |   content: "k"; }
643 | 
644 | i.xwing-miniatures-ship-cr90corvette:before {
645 |   content: "2"; }
646 | 
647 | i.xwing-miniatures-ship-croccruiser:before {
648 |   content: "5"; }
649 | 
650 | i.xwing-miniatures-ship-customizedyt1300lightfreighter:before {
651 |   content: "W"; }
652 | 
653 | i.xwing-miniatures-ship-droidtrifighter:before {
654 |   content: "+"; }
655 | 
656 | i.xwing-miniatures-ship-delta7aethersprite:before {
657 |   content: "\\"; }
658 | 
659 | i.xwing-miniatures-ship-escapecraft:before {
660 |   content: "X"; }
661 | 
662 | i.xwing-miniatures-ship-eta2actis:before {
663 |   content: "-"; }
664 | 
665 | i.xwing-miniatures-ship-ewing:before {
666 |   content: "e"; }
667 | 
668 | i.xwing-miniatures-ship-fangfighter:before {
669 |   content: "M"; }
670 | 
671 | i.xwing-miniatures-ship-fireball:before {
672 |   content: "0"; }
673 | 
674 | i.xwing-miniatures-ship-firesprayclasspatrolcraft:before {
675 |   content: "f"; }
676 | 
677 | i.xwing-miniatures-ship-g1astarfighter:before {
678 |   content: "n"; }
679 | 
680 | i.xwing-miniatures-ship-gozanticlasscruiser:before {
681 |   content: "4"; }
682 | 
683 | i.xwing-miniatures-ship-gr75mediumtransport:before {
684 |   content: "1"; }
685 | 
686 | i.xwing-miniatures-ship-hmpdroidgunship:before {
687 |   content: "."; }
688 | 
689 | i.xwing-miniatures-ship-hwk290lightfreighter:before {
690 |   content: "h"; }
691 | 
692 | i.xwing-miniatures-ship-hyenaclassdroidbomber:before {
693 |   content: "="; }
694 | 
695 | i.xwing-miniatures-ship-jumpmaster5000:before {
696 |   content: "p"; }
697 | 
698 | i.xwing-miniatures-ship-kihraxzfighter:before {
699 |   content: "r"; }
700 | 
701 | i.xwing-miniatures-ship-laatigunship:before {
702 |   content: "/"; }
703 | 
704 | i.xwing-miniatures-ship-lambdaclasst4ashuttle:before {
705 |   content: "l"; }
706 | 
707 | i.xwing-miniatures-ship-lancerclasspursuitcraft:before {
708 |   content: "L"; }
709 | 
710 | i.xwing-miniatures-ship-m12lkimogilafighter:before {
711 |   content: "K"; }
712 | 
713 | i.xwing-miniatures-ship-m3ainterceptor:before {
714 |   content: "s"; }
715 | 
716 | i.xwing-miniatures-ship-mg100starfortress:before {
717 |   content: "Z"; }
718 | 
719 | i.xwing-miniatures-ship-modifiedtielnfighter:before {
720 |   content: "C"; }
721 | 
722 | i.xwing-miniatures-ship-modifiedyt1300lightfreighter:before {
723 |   content: "m"; }
724 | 
725 | i.xwing-miniatures-ship-nabooroyaln1starfighter:before {
726 |   content: "<"; }
727 | 
728 | i.xwing-miniatures-ship-nantexclassstarfighter:before {
729 |   content: ";"; }
730 | 
731 | i.xwing-miniatures-ship-nimbusclassvwing:before {
732 |   content: ","; }
733 | 
734 | i.xwing-miniatures-ship-quadrijettransferspacetug:before {
735 |   content: "q"; }
736 | 
737 | i.xwing-miniatures-ship-raiderclasscorvette:before {
738 |   content: "3"; }
739 | 
740 | i.xwing-miniatures-ship-resistancetransport:before {
741 |   content: ">"; }
742 | 
743 | i.xwing-miniatures-ship-resistancetransportpod:before {
744 |   content: "?"; }
745 | 
746 | i.xwing-miniatures-ship-rz1awing:before {
747 |   content: "a"; }
748 | 
749 | i.xwing-miniatures-ship-rz2awing:before {
750 |   content: "E"; }
751 | 
752 | i.xwing-miniatures-ship-scavengedyt1300:before {
753 |   content: "Y"; }
754 | 
755 | i.xwing-miniatures-ship-scurrgh6bomber:before {
756 |   content: "H"; }
757 | 
758 | i.xwing-miniatures-ship-sheathipedeclassshuttle:before {
759 |   content: "%"; }
760 | 
761 | i.xwing-miniatures-ship-sithinfiltrator:before {
762 |   content: "]"; }
763 | 
764 | i.xwing-miniatures-ship-starviperclassattackplatform:before {
765 |   content: "v"; }
766 | 
767 | i.xwing-miniatures-ship-syliureclasshyperspacering:before {
768 |   content: "*"; }
769 | 
770 | i.xwing-miniatures-ship-t65xwing:before {
771 |   content: "x"; }
772 | 
773 | i.xwing-miniatures-ship-t70xwing:before {
774 |   content: "w"; }
775 | 
776 | i.xwing-miniatures-ship-tieadvancedv1:before {
777 |   content: "R"; }
778 | 
779 | i.xwing-miniatures-ship-tieadvancedx1:before {
780 |   content: "A"; }
781 | 
782 | i.xwing-miniatures-ship-tieagaggressor:before {
783 |   content: "`"; }
784 | 
785 | i.xwing-miniatures-ship-tiebainterceptor:before {
786 |   content: "j"; }
787 | 
788 | i.xwing-miniatures-ship-tiecapunisher:before {
789 |   content: "N"; }
790 | 
791 | i.xwing-miniatures-ship-tieddefender:before {
792 |   content: "D"; }
793 | 
794 | i.xwing-miniatures-ship-tiefofighter:before {
795 |   content: "O"; }
796 | 
797 | i.xwing-miniatures-ship-tieinterceptor:before {
798 |   content: "I"; }
799 | 
800 | i.xwing-miniatures-ship-tielnfighter:before {
801 |   content: "F"; }
802 | 
803 | i.xwing-miniatures-ship-tiephphantom:before {
804 |   content: "P"; }
805 | 
806 | i.xwing-miniatures-ship-tierbheavy:before {
807 |   content: "J"; }
808 | 
809 | i.xwing-miniatures-ship-tiereaper:before {
810 |   content: "V"; }
811 | 
812 | i.xwing-miniatures-ship-tiesabomber:before {
813 |   content: "B"; }
814 | 
815 | i.xwing-miniatures-ship-tiesebomber:before {
816 |   content: "!"; }
817 | 
818 | i.xwing-miniatures-ship-tiesffighter:before {
819 |   content: "S"; }
820 | 
821 | i.xwing-miniatures-ship-tieskstriker:before {
822 |   content: "T"; }
823 | 
824 | i.xwing-miniatures-ship-tievnsilencer:before {
825 |   content: "$"; }
826 | 
827 | i.xwing-miniatures-ship-tiewiwhispermodifiedinterceptor:before {
828 |   content: "#"; }
829 | 
830 | i.xwing-miniatures-ship-upsilonclasscommandshuttle:before {
831 |   content: "U"; }
832 | 
833 | i.xwing-miniatures-ship-ut60duwing:before {
834 |   content: "u"; }
835 | 
836 | i.xwing-miniatures-ship-v19torrentstarfighter:before {
837 |   content: "^"; }
838 | 
839 | i.xwing-miniatures-ship-vcx100lightfreighter:before {
840 |   content: "G"; }
841 | 
842 | i.xwing-miniatures-ship-vt49decimator:before {
843 |   content: "d"; }
844 | 
845 | i.xwing-miniatures-ship-vultureclassdroidfighter:before {
846 |   content: "_"; }
847 | 
848 | i.xwing-miniatures-ship-xiclasslightshuttle:before {
849 |   content: "Q"; }
850 | 
851 | i.xwing-miniatures-ship-yt2400lightfreighter:before {
852 |   content: "o"; }
853 | 
854 | i.xwing-miniatures-ship-yv666lightfreighter:before {
855 |   content: "t"; }
856 | 
857 | i.xwing-miniatures-ship-z95af4headhunter:before {
858 |   content: "z"; }
859 | 
860 | i.xwing-miniatures-ship-clonez95headhunter:before {
861 |   content: "}"; }
862 | 
863 | i.xwing-miniatures-ship-rogueclassstarfighter:before {
864 |   content: "|"; }
865 | 
866 | i.xwing-miniatures-ship-st70assaultship:before {
867 |   content: "'"; }
868 | 
869 | i.xwing-miniatures-ship-gauntletfighter:before {
870 |   content: "6"; }
871 | 
872 | i.xwing-miniatures-ship-tridentclassassaultship:before {
873 |   content: "7"; }
874 | 
--------------------------------------------------------------------------------
/fonts/xwing-miniatures.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/fonts/xwing-miniatures.ttf
--------------------------------------------------------------------------------
/images/core2asteroid0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/core2asteroid0.png
--------------------------------------------------------------------------------
/images/core2asteroid1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/core2asteroid1.png
--------------------------------------------------------------------------------
/images/core2asteroid2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/core2asteroid2.png
--------------------------------------------------------------------------------
/images/core2asteroid3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/core2asteroid3.png
--------------------------------------------------------------------------------
/images/core2asteroid4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/core2asteroid4.png
--------------------------------------------------------------------------------
/images/core2asteroid5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/core2asteroid5.png
--------------------------------------------------------------------------------
/images/coreasteroid0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/coreasteroid0.png
--------------------------------------------------------------------------------
/images/coreasteroid1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/coreasteroid1.png
--------------------------------------------------------------------------------
/images/coreasteroid2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/coreasteroid2.png
--------------------------------------------------------------------------------
/images/coreasteroid3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/coreasteroid3.png
--------------------------------------------------------------------------------
/images/coreasteroid4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/coreasteroid4.png
--------------------------------------------------------------------------------
/images/coreasteroid5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/coreasteroid5.png
--------------------------------------------------------------------------------
/images/gascloud1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/gascloud1.png
--------------------------------------------------------------------------------
/images/gascloud2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/gascloud2.png
--------------------------------------------------------------------------------
/images/gascloud3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/gascloud3.png
--------------------------------------------------------------------------------
/images/gascloud4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/gascloud4.png
--------------------------------------------------------------------------------
/images/gascloud5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/gascloud5.png
--------------------------------------------------------------------------------
/images/gascloud6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/gascloud6.png
--------------------------------------------------------------------------------
/images/pomasteroid1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/pomasteroid1.png
--------------------------------------------------------------------------------
/images/pomasteroid2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/pomasteroid2.png
--------------------------------------------------------------------------------
/images/pomasteroid3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/pomasteroid3.png
--------------------------------------------------------------------------------
/images/pomdebris1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/pomdebris1.png
--------------------------------------------------------------------------------
/images/pomdebris2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/pomdebris2.png
--------------------------------------------------------------------------------
/images/pomdebris3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/pomdebris3.png
--------------------------------------------------------------------------------
/images/vt49decimatordebris0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/vt49decimatordebris0.png
--------------------------------------------------------------------------------
/images/vt49decimatordebris1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/vt49decimatordebris1.png
--------------------------------------------------------------------------------
/images/vt49decimatordebris2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/vt49decimatordebris2.png
--------------------------------------------------------------------------------
/images/yt2400debris0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/yt2400debris0.png
--------------------------------------------------------------------------------
/images/yt2400debris1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/yt2400debris1.png
--------------------------------------------------------------------------------
/images/yt2400debris2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/raithos/xwing/3172fcc5cb1ad1b60d50d4bd074735177cb755f0/images/yt2400debris2.png
--------------------------------------------------------------------------------
/jade/index.jade:
--------------------------------------------------------------------------------
  1 | doctype html
  2 | - var now_ts = parseInt(new Date().getTime() / 1000)
  3 | 
  4 | html
  5 |   head
  6 |     title YASB 2
  7 |     meta(charset="utf-8")
  8 | 
  9 |     meta(name="viewport", content="width=device-width, initial-scale=1.0")
 10 |     meta(property="og:url", content="http://yasb.app/")
 11 |     meta(property="og:image", content="http://yasb.app/android-chrome-192x192.png")
 12 |     meta(property="og:description", content="YASB is a simple, fast, and easy to use squad builder for X-Wing Miniatures by Atomic Mass Games.")
 13 | 
 14 |     link(rel="apple-touch-icon", sizes="180x180", href="apple-touch-icon.png")
 15 |     link(rel="icon", type="image/png", sizes="32x32", href="favicon-32x32.png")
 16 |     link(rel="icon", type="image/png", sizes="16x16", href="favicon-16x16.png")
 17 |     link(rel="manifest", href="site.webmanifest")
 18 |     link(rel="shortcut icon", type="image/x-icon", href="favicon.ico")
 19 | 
 20 |     link(rel="stylesheet", href=`bower_components/select2/select2.css?${now_ts}`)
 21 |     link(rel="stylesheet", href=`bootstrap/css/bootstrap.css?${now_ts}`)
 22 | 
 23 |     link(rel="stylesheet", href=`stylesheets/xwing.css?${now_ts}`)
 24 |     link(rel="stylesheet", href=`stylesheets/xwing-screen.css?${now_ts}`, media="screen")
 25 |     link(rel="stylesheet", href=`stylesheets/xwing-print.css?${now_ts}`, media="print")
 26 |     link(rel="stylesheet", href=`stylesheets/backgrounds.css?${now_ts}`, media="screen")
 27 |     link(rel="stylesheet", href=`fonts/xwing-miniatures.css?${now_ts}`, media="screen,print")
 28 |     link(rel="stylesheet", href=`bower_components/font-awesome/css/all.min.css?${now_ts}`)
 29 | 
 30 | 
 31 |   body
 32 |     // body layout
 33 |     script(async='', src='https://www.googletagmanager.com/gtag/js?id=G-WQ43KS2P7F')
 34 |     script.
 35 |       window.dataLayer = window.dataLayer || [];
 36 |       function gtag(){dataLayer.push(arguments);}
 37 |       gtag('js', new Date());
 38 | 
 39 |     .tabbable.d-print-none
 40 |       ul.nav.nav-pills.main-top-nav-bar
 41 |         li.nav-item
 42 |           a#rebelTab.nav-link('data-toggle'="tab", href='#rebelContent', title='Rebel Alliance')  
 43 |         li.nav-item
 44 |           a#empireTab.nav-link('data-toggle'="tab", href='#empireContent', title='Galactic Empire')  
 45 |         li.nav-item
 46 |           a#scumTab.nav-link('data-toggle'="tab", href='#scumContent', title='Scum and Villany')  
 47 |         li.nav-item
 48 |           a#resistanceTab.nav-link('data-toggle'="tab", href='#resistanceContent', title='Resistance')  
 49 |         li.nav-item
 50 |           a#firstorderTab.nav-link('data-toggle'="tab", href='#firstorderContent', title='First Order')  
 51 |         li.nav-item
 52 |           a#republicTab.nav-link('data-toggle'="tab", href='#republicContent', title='Galactic Republic')  
 53 |         li.nav-item
 54 |           a#separatistTab.nav-link('data-toggle'="tab", href='#separatistContent', title='Separatist Alliance')  
 55 |         li.nav-item
 56 |           a#allTab.nav-link('data-toggle'="tab", href='#allContent', title='All', class='translated', defaultText='MultiFaction')
 57 |         li.nav-item.float-right
 58 |           a.nav-link(href='https://github.com/raithos/xwing/issues/new/choose', target='_blank', class='translated', defaultText='Submit Bug/Feature Request') 
 59 |         li.nav-item.float-right
 60 |           a#login-logout.d-none.nav-link(href='#')
 61 |             span.hide-authenticated
 62 |               i.fa.fa-sign-in-alt
 63 |               span.translated(defaultText='Log In')
 64 |             span.show-authenticated
 65 |               i.fa.fa-sign-out-alt
 66 |               span.translated(defaultText='Log Out')
 67 |         li.nav-item.float-right
 68 |           a#auth-status.nav-link(href='#')
 69 |             i.fa.fa-sync.fa-spin
 70 |             span.payload
 71 |         // li.nav-item.float-right
 72 |         //  a.nav-link(href='old', target='_blank') Old Version 
 73 |         li.dropdown.language-picker.nav-item.float-right
 74 |           a.nav-link.dropdown-toggle('data-toggle'='dropdown', href='#')
 75 |             span.language-placeholder
 76 |             b.caret
 77 |           ul.dropdown-menu      
 78 |         li.nav-item.float-right
 79 |           a#browserTab.nav-link('data-toggle'="tab", href='#browserContent', class='translated', defaultText='Card Browser')
 80 |         li.nav-item.float-right
 81 |           a#rulesTab.nav-link('data-toggle'="tab", href='#rulesBrowserContent', class='translated', defaultText='Rules')
 82 | 
 83 |       .tab-content
 84 |         .tab-pane.fade#rebelContent
 85 |           #rebel-builder
 86 |         .tab-pane.fade#empireContent
 87 |           #empire-builder
 88 |         .tab-pane.fade#scumContent
 89 |           #scum-builder
 90 |         .tab-pane.fade#resistanceContent
 91 |           #resistance-builder
 92 |         .tab-pane.fade#firstorderContent
 93 |           #firstorder-builder
 94 |         .tab-pane.fade#republicContent
 95 |           #republic-builder
 96 |         .tab-pane.fade#separatistContent
 97 |           #separatist-builder
 98 |         .tab-pane.fade#allContent
 99 |           #all-builder
100 |         .tab-pane.fade#browserContent
101 |           #card-browser
102 |         .tab-pane.fade#rulesBrowserContent
103 |           #rules-browser
104 |     .footer
105 |       .msie8-hax
106 | 
107 |     #printable.d-none.d-print-block
108 |       .printable-header
109 |       .printable-body
110 |       .printable-footer
111 |         | Created at
112 |         strong.site-placeholder
113 | 
114 |     // JS linkages
115 |     script(src=`bower_components/jquery/js/jquery.js?${now_ts}`)
116 |     script(src=`bower_components/jquery-ui/js/jquery-ui.min.js?${now_ts}`)
117 |     script(src=`bower_components/jquery-ajaxtransport-xdomainrequest/jquery.xdomainrequest.min.js?${now_ts}`)
118 |     script(src=`bower_components/jquery.qrcode/js/jquery-qrcode.min.js?${now_ts}`)
119 |     script(src=`bower_components/select2/select2.js?${now_ts}`)
120 | 
121 |     script(src=`https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js` integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous")
122 |     script(src=`bootstrap/js/bootstrap.js?${now_ts}`)
123 | 	
124 |     script(src=`javascripts/xwing.min.js?${now_ts}`)
125 |     script(src=`javascripts/xwingcontent.min.js?${now_ts}`)
126 |     script(src=`javascripts/manifest.min.js?${now_ts}`)
127 |     script(src=`javascripts/xwingquickbuilds.min.js?${now_ts}`)
128 |     script(src=`javascripts/xwingrules.min.js?${now_ts}`)
129 |     script(src=`javascripts/translation-en.min.js?${now_ts}`)
130 |     script(src=`javascripts/translations.min.js?${now_ts}`)
131 | 	
132 |     script
133 |       :coffee-script
134 |         $ ->
135 |           window.setupTranslationSupport()
136 | 
137 |           switch window.location.hash
138 |             when '#rebelContent'
139 |               window.location.replace '?f=Rebel Alliance'
140 |             when '#empireContent'
141 |               window.location.replace '?f=Galactic Empire'
142 |             when '#scumContent'
143 |               window.location.replace '?f=Scum and Villainy'
144 |             when '#resistanceContent'
145 |               window.location.replace '?f=Resistance'
146 |             when '#firstorderContent'
147 |               window.location.replace '?f=First Order'
148 |             when '#republicContent'
149 |               window.location.replace '?f=Galactic Republic'
150 |             when '#separatistContent'
151 |               window.location.replace '?f=Separatist Alliance'
152 |             when '#allContent'
153 |               window.location.replace '?f=All'
154 | 
155 |           $('.site-placeholder').text """http://\#{window.location.host}\#{window.location.pathname}"""
156 |           $('#rebelTab').click (e) ->
157 |             gtag 'config', 'G-WQ43KS2P7F',
158 |               page_path: '/rebels'
159 |               page_title: 'Rebel Alliance'
160 |           $('#empireTab').click (e) ->
161 |             gtag 'config', 'G-WQ43KS2P7F',
162 |               page_path: '/empire'
163 |               page_title: 'Galactic Empire'
164 |           $('#scumTab').click (e) ->
165 |             gtag 'config', 'G-WQ43KS2P7F',
166 |               page_path: '/scum'
167 |               page_title: 'Scum and Villainy'
168 |           $('#resistanceTab').click (e) ->
169 |             gtag 'config', 'G-WQ43KS2P7F',
170 |               page_path: '/resistance'
171 |               page_title: 'Resistance'
172 |           $('#firstorderTab').click (e) ->
173 |             gtag 'config', 'G-WQ43KS2P7F',
174 |               page_path: '/firstorder'
175 |               page_title: 'First Order'
176 |           $('#republicTab').click (e) ->
177 |             gtag 'config', 'G-WQ43KS2P7F',
178 |               page_path: '/republic'
179 |               page_title: 'Galactic Republic'
180 |           $('#separatistTab').click (e) ->
181 |             gtag 'config', 'G-WQ43KS2P7F',
182 |               page_path: '/separatist'
183 |               page_page_title: 'Separatist Alliance'
184 |           $('#allTab').click (e) ->
185 |             gtag 'config', 'G-WQ43KS2P7F',
186 |               page_path: '/all'
187 |               page_page_title: 'All'
188 |           $('#browserTab').click (e) ->
189 |             gtag 'config', 'G-WQ43KS2P7F',
190 |               page_path: '/browser'
191 |               page_title: 'Card Browser'
192 |           $('#rulesTab').click (e) ->
193 |             gtag 'config', 'G-WQ43KS2P7F',
194 |               page_path: '/rules-browser'
195 |               page_title: 'Rules'
196 | 
197 |           window.rebel_sb = new window.SquadBuilder
198 |               tab: '#rebelTab'
199 |               faction: 'Rebel Alliance'
200 |               container: '#rebel-builder'
201 |               printable_container: '#printable'
202 |           window.registerBuilderForTranslation window.rebel_sb
203 | 
204 |           window.empire_sb = new window.SquadBuilder
205 |               tab: '#empireTab'
206 |               faction: 'Galactic Empire'
207 |               container: '#empire-builder'
208 |               printable_container: '#printable'
209 |           window.registerBuilderForTranslation window.empire_sb
210 | 
211 |           window.scum_sb = new window.SquadBuilder
212 |               tab: '#scumTab'
213 |               faction: 'Scum and Villainy'
214 |               container: '#scum-builder'
215 |               printable_container: '#printable'
216 |           window.registerBuilderForTranslation window.scum_sb
217 | 
218 |           window.resistance_sb = new window.SquadBuilder
219 |               tab: '#resistanceTab'
220 |               faction: 'Resistance'
221 |               container: '#resistance-builder'
222 |               printable_container: '#printable'
223 |           window.registerBuilderForTranslation window.resistance_sb
224 | 
225 |           window.firstorder_sb = new window.SquadBuilder
226 |               tab: '#firstorderTab'
227 |               faction: 'First Order'
228 |               container: '#firstorder-builder'
229 |               printable_container: '#printable'
230 |           window.registerBuilderForTranslation window.firstorder_sb
231 |           
232 |           window.republic_sb = new window.SquadBuilder
233 |               tab: '#republicTab'
234 |               faction: 'Galactic Republic'
235 |               container: '#republic-builder'
236 |               printable_container: '#printable'
237 |           window.registerBuilderForTranslation window.republic_sb
238 | 
239 |           window.separatist_sb = new window.SquadBuilder
240 |               tab: '#separatistTab'
241 |               faction: 'Separatist Alliance'
242 |               container: '#separatist-builder'
243 |               printable_container: '#printable'
244 |           window.registerBuilderForTranslation window.separatist_sb
245 | 
246 |           window.all_sb = new window.SquadBuilder
247 |               tab: '#allTab'
248 |               faction: 'All'
249 |               container: '#all-builder'
250 |               printable_container: '#printable'
251 |           window.registerBuilderForTranslation window.all_sb
252 | 
253 |           switch $.getParameterByName 'f'
254 |             when 'Rebel Alliance'
255 |                 gtag 'config', 'G-WQ43KS2P7F',
256 |                   page_path: '/rebels'
257 |                   page_title: 'Rebel Alliance'
258 |                 $('#rebelTab').tab 'show'
259 |             when 'Galactic Empire'
260 |                 gtag 'config', 'G-WQ43KS2P7F',
261 |                   page_path: '/empire'
262 |                   page_title: 'Galactic Empire'
263 |                 $('#empireTab').tab 'show'
264 |             when 'Scum and Villainy'
265 |                 gtag 'config', 'G-WQ43KS2P7F',
266 |                   page_path: '/scum'
267 |                   page_title: 'Scum and Villainy'
268 |                 $('#scumTab').tab 'show'
269 |             when 'Resistance'
270 |                 gtag 'config', 'G-WQ43KS2P7F',
271 |                   page_path: '/resistance'
272 |                   page_title: 'Resistance'
273 |                 $('#resistanceTab').tab 'show'
274 |             when 'First Order'
275 |                 gtag 'config', 'G-WQ43KS2P7F',
276 |                   page_path: '/firstorder'
277 |                   page_title: 'First Order'
278 |                 $('#firstorderTab').tab 'show'
279 |             when 'Galactic Republic'
280 |                 gtag 'config', 'G-WQ43KS2P7F',
281 |                   page_path: '/republic'
282 |                   page_title: 'Galactic Republic'
283 |                 $('#republicTab').tab 'show'
284 |             when 'Separatist Alliance'
285 |                 gtag 'config', 'G-WQ43KS2P7F',
286 |                   page_path: '/separatist'
287 |                   page_title: 'Separatist Alliance'
288 |                 $('#separatistTab').tab 'show'
289 |             when 'All'
290 |                 gtag 'config', 'G-WQ43KS2P7F',
291 |                   page_path: '/all'
292 |                   page_title: 'All'
293 |                 $('#allTab').tab 'show'
294 |             else
295 |                 gtag 'config', 'G-WQ43KS2P7F',
296 |                   page_path: '/default'
297 |                   page_title: 'Main Page'
298 |                 $('#rebelTab').tab 'show'
299 | 
300 |           window.backend = new SquadBuilderBackend
301 |               server: 'https://login.yasb.app'
302 |               builders: [
303 |                 window.rebel_sb
304 |                 window.empire_sb
305 |                 window.scum_sb
306 |                 window.resistance_sb
307 |                 window.firstorder_sb
308 |                 window.republic_sb
309 |                 window.separatist_sb
310 |                 window.all_sb
311 |               ]
312 |               login_logout_button: '#login-logout'
313 |               auth_status: '#auth-status'
314 | 
315 |           window.cardBrowser = new CardBrowser
316 |               container: '#card-browser'
317 | 
318 |           window.rulesBrowser = new RulesBrowser
319 |               container: '#rules-browser'
320 | 
321 |           window.backend.getSettings (settings) ->
322 |               window.backend.getLanguagePreference settings, (language, priority) ->
323 |                 $(window).trigger 'xwing:languageChanged', [ language, priority ]
324 | 
325 |           window.setupTranslationUI window.backend
326 | 
327 |           if (window.location.href.indexOf('https:') != 0) and ((navigator.userAgent.indexOf('MSIE 8') > -1) or (navigator.userAgent.indexOf('MSIE 9') > -1))
328 |               $('.msie8-hax').html '''
329 |                   Trouble logging in? Try clicking here  first.
330 |               '''
331 |               $('.msie8-hax a').click (e) ->
332 |                   e.preventDefault()
333 |                   window.location.href = window.location.href.replace(/^http:/, 'https:')
334 | 
335 |     .font-hax
336 |       span(style="font-family: BankGothicHD")
337 |         |  
338 |       span(style="font-family: kimberley")
339 |         |  
340 |       span(style="font-family: XWing")
341 |         |  
342 |       span(style="font-family: XWingShip")
343 |         |  
344 |     img.d-none(src="images/coreasteroid0.png")
345 |     img.d-none(src="images/coreasteroid1.png")
346 |     img.d-none(src="images/coreasteroid2.png")
347 |     img.d-none(src="images/coreasteroid3.png")
348 |     img.d-none(src="images/coreasteroid4.png")
349 |     img.d-none(src="images/coreasteroid5.png")
350 |     img.d-none(src="images/yt2400debris0.png")
351 |     img.d-none(src="images/yt2400debris1.png")
352 |     img.d-none(src="images/yt2400debris2.png")
353 |     img.d-none(src="images/vt49decimatordebris0.png")
354 |     img.d-none(src="images/vt49decimatordebris1.png")
355 |     img.d-none(src="images/vt49decimatordebris2.png")
356 |     img.d-none(src="images/core2asteroid0.png")
357 |     img.d-none(src="images/core2asteroid1.png")
358 |     img.d-none(src="images/core2asteroid2.png")
359 |     img.d-none(src="images/core2asteroid3.png")
360 |     img.d-none(src="images/core2asteroid4.png")
361 |     img.d-none(src="images/core2asteroid5.png")
362 |     img.d-none(src="images/gascloud1.png")
363 |     img.d-none(src="images/gascloud2.png")
364 |     img.d-none(src="images/gascloud3.png")
365 |     img.d-none(src="images/gascloud4.png")
366 |     img.d-none(src="images/gascloud5.png")
367 |     img.d-none(src="images/gascloud6.png")
368 |     img.d-none(src="images/pomasteroid1.png")
369 |     img.d-none(src="images/pomasteroid2.png")
370 |     img.d-none(src="images/pomasteroid3.png")
371 |     img.d-none(src="images/pomdebris1.png")
372 |     img.d-none(src="images/pomdebris2.png")
373 |     img.d-none(src="images/pomdebris3.png")
--------------------------------------------------------------------------------
/jade/privacy.jade:
--------------------------------------------------------------------------------
 1 | doctype html
 2 | html
 3 |   head
 4 |     title (Yet Another) X-Wing Miniatures Squad Builder Privacy Policy
 5 |     link(rel="stylesheet", href="stylesheets/xwing.css?#{parseInt(new Date().getTime() / 1000)}")
 6 |   body
 7 |     :markdown
 8 |       # Yet Another Privacy Policy
 9 | 
10 |       Apparently Facebook requires apps to have privacy policies.  So.
11 | 
12 |       ## Data
13 | 
14 |       ### We only collect anonymous information.
15 | 
16 |       We use technologies like cookies (small files stored by your browser), web beacons, or unique device identifiers to anonymously identify your computer or device so we can deliver a better experience. Our systems also log information like your browser, operating system and IP address.
17 | 
18 |       We do not collect personally identifiable information about you. In other words, we do not collect information such as your name, address, phone number or email address.
19 | 
20 |       We do not knowingly contact or collect personal information from children under 13. If you believe we have inadvertently collected such information, please contact us so we can promptly obtain parental consent or remove the information.	
21 | 
22 |       ## Location
23 | 
24 |       ### We do not store or share your precise location.
25 | 
26 |       We do not use or collect your precise geographic location.	
27 | 
28 |       ## Access
29 | 
30 |       ### You can request to see your personal data.
31 |       You can sign into your account to see any personally identifiable information we have stored, such as your name, email, address or phone number. You can also contact us by email to request to see this information.
32 | 
33 |       That is, if we actually stored it, which we don't.  So there isn't any personal data to be gotten.
34 | 
35 |       ## Deletion
36 | 
37 |       ### We may keep data indefinitely.
38 | 
39 |       We may keep data indefinitely. That data is not personal data because we don't store any. You can email raithos@gmail.com to request data removal, however, as stated, we don't store personal data so there isn't anything to remove.
40 | 
41 |       ## Sharing
42 | 
43 |       ### We don't share your personal data with other companies.
44 |       We generally do not share personally identifiable information (such as name, address, email or phone) with other companies.	
45 | 
46 |       This is because, as mentioned above, we don't collect this information at all. Stupid boilerplate.
47 | 
48 |       ## Ad Tracking
49 | 
50 |       ### No ad companies collect data through our service.
51 |       We do not allow advertising companies to collect data through our service for ad targeting.	
52 | 
53 |       ## Contact
54 | 
55 |       ### You can ask privacy questions.
56 |       If you have any questions or concerns about our privacy policies, please [contact us](https://github.com/raithos/xwing/issues/new).
57 | 
58 |       ## Vendors
59 | 
60 |       ### Service providers access data on our behalf.
61 |       In order to serve you, we may share your personal and anonymous information with other companies, including vendors and contractors. Their use of information is limited to these purposes, and subject to agreements that require them to keep the information confidential. Our vendors provide assurance that they take reasonable steps to safeguard the data they hold on our behalf, although data security cannot be guaranteed.
62 | 
63 |       Analytics companies may access anonymous data (such as your IP address or device ID) to help us understand how our services are used. They use this data solely on our behalf. They do not share it except in aggregate form; no data is shared as to any individual user.
64 | 
65 |       ## Security
66 | 
67 |       ### We take steps to protect personal information.
68 |       We take reasonable steps to secure your personally identifiable information against unauthorized access or disclosure. However, no security or encryption method can be guaranteed to protect information from hackers or human error.
69 | 
70 |       Information we collect may be stored or processed on computers located in any country where we do business.	
71 | 
72 |       ## Special
73 | 
74 |       ### Special situations may require disclosure of your data.
75 |       To operate the service, we also may make identifiable and anonymous information available to third parties in these limited circumstances: (1) with your express consent, (2) when we have a good faith belief it is required by law, (3) when we have a good faith belief it is necessary to protect our rights or property, or (4) to any successor or purchaser in a merger, acquisition, liquidation, dissolution or sale of assets. Your consent will not be required for disclosure in these cases, but we will attempt to notify you, to the extent permitted by law to do so.	
76 | 
77 |       ## More
78 | 
79 |       ### You can review more privacy-related information.
80 |       This privacy policy was last updated on 19 May 2014. Our privacy policy may change from time to time. If we make any material changes to our policies, we will place a prominent notice on our website or application. If the change materially affects registered users, we will send a notice to you by email, push notification or text.	
81 | 
82 |       The above was created using [PrivacyChoice's templates](http://www.privacychoice.org/resources).  It is provided under the [Creative Commons BY 2.0 license](http://creativecommons.org/licenses/by/2.0/).
83 | 
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "yasb",
 3 |   "description": "Squad builder for Atomic Mass Games ' X-Wing Miniatures Game",
 4 |   "version": "2.5.0",
 5 |   "author": [
 6 |     "Geordan Rosario ",
 7 |     "Stephen Kim ",
 8 |     "Patrick Mischke "
 9 |   ],
10 |   "license": "MIT",
11 |   "main": "app/index.html",
12 |   "private": "true",
13 |   "devDependencies": {
14 |     "bower": "*",
15 |     "coffeescript": "*",
16 |     "grunt": "*",
17 |     "grunt-bower-task": "*",
18 |     "grunt-contrib-copy": "*",
19 |     "grunt-contrib-pug": "*",
20 |     "grunt-contrib-uglify": "*",
21 |     "grunt-contrib-coffee": "*",
22 |     "grunt-sass": "*",
23 |     "jstransformer-coffee-script": "*",
24 |     "jstransformer-markdown": "*",
25 |     "sass": "*",
26 |     "phantomjs-prebuilt": "*"
27 |   },
28 |   "engines": {
29 |     "node": "*"
30 |   },
31 |   "dependencies": {
32 |     "install": "^0.13.0",
33 |     "sass": "^1.85.0"
34 |   }
35 | }
36 | 
--------------------------------------------------------------------------------
/privacy.haml:
--------------------------------------------------------------------------------
 1 | !!!
 2 | %html
 3 |   %head
 4 |     %title (Yet Another) X-Wing Miniatures Squad Builder Privacy Policy
 5 |     %link{:rel => "stylesheet", :href => "stylesheets/xwing.css?#{Time.now.to_i}"}
 6 |   %body
 7 |     :markdown
 8 |       # Yet Another Privacy Policy
 9 | 
10 |       Apparently Facebook requires apps to have privacy policies.  So.
11 | 
12 |       ## Data
13 | 
14 |       ### We only collect anonymous information.
15 | 
16 |       We use technologies like cookies (small files stored by your browser), web beacons, or unique device identifiers to anonymously identify your computer or device so we can deliver a better experience. Our systems also log information like your browser, operating system and IP address.
17 | 
18 |       We do not collect personally identifiable information about you. In other words, we do not collect information such as your name, address, phone number or email address.
19 | 
20 |       We do not knowingly contact or collect personal information from children under 13. If you believe we have inadvertently collected such information, please contact us so we can promptly obtain parental consent or remove the information.	
21 | 
22 |       ## Location
23 | 
24 |       ### We do not store or share your precise location.
25 | 
26 |       We do not use or collect your precise geographic location.	
27 | 
28 |       ## Access
29 | 
30 |       ### You can request to see your personal data.
31 |       You can sign into your account to see any personally identifiable information we have stored, such as your name, email, address or phone number. You can also contact us by email to request to see this information.
32 | 
33 |       That is, if we actually stored it, which we don't.  So there isn't any personal data to be gotten.
34 | 
35 |       ## Deletion
36 | 
37 |       ### We may keep data indefinitely.
38 | 
39 |       We may keep data indefinitely.	
40 | 
41 |       ## Sharing
42 | 
43 |       ### We don't share your personal data with other companies.
44 |       We generally do not share personally identifiable information (such as name, address, email or phone) with other companies.	
45 | 
46 |       This is because, as mentioned above, we don't collect this information at all.  Stupid boilerplate.
47 | 
48 |       ## Ad Tracking
49 | 
50 |       ### No ad companies collect data through our service.
51 |       We do not allow advertising companies to collect data through our service for ad targeting.	
52 | 
53 |       ## Contact
54 | 
55 |       ### You can ask privacy questions.
56 |       If you have any questions or concerns about our privacy policies, please [contact us](https://github.com/geordanr/xwing/issues/new).
57 | 
58 |       ## Vendors
59 | 
60 |       ### Service providers access data on our behalf.
61 |       In order to serve you, we may share your personal and anonymous information with other companies, including vendors and contractors. Their use of information is limited to these purposes, and subject to agreements that require them to keep the information confidential. Our vendors provide assurance that they take reasonable steps to safeguard the data they hold on our behalf, although data security cannot be guaranteed.
62 | 
63 |       Analytics companies may access anonymous data (such as your IP address or device ID) to help us understand how our services are used. They use this data solely on our behalf. They do not share it except in aggregate form; no data is shared as to any individual user.
64 | 
65 |       ## Security
66 | 
67 |       ### We take steps to protect personal information.
68 |       We take reasonable steps to secure your personally identifiable information against unauthorized access or disclosure. However, no security or encryption method can be guaranteed to protect information from hackers or human error.
69 | 
70 |       Information we collect may be stored or processed on computers located in any country where we do business.	
71 | 
72 |       ## Special
73 | 
74 |       ### Special situations may require disclosure of your data.
75 |       To operate the service, we also may make identifiable and anonymous information available to third parties in these limited circumstances: (1) with your express consent, (2) when we have a good faith belief it is required by law, (3) when we have a good faith belief it is necessary to protect our rights or property, or (4) to any successor or purchaser in a merger, acquisition, liquidation, dissolution or sale of assets. Your consent will not be required for disclosure in these cases, but we will attempt to notify you, to the extent permitted by law to do so.	
76 | 
77 |       ## More
78 | 
79 |       ### You can review more privacy-related information.
80 |       This privacy policy was last updated on 19 May 2014. Our privacy policy may change from time to time. If we make any material changes to our policies, we will place a prominent notice on our website or application. If the change materially affects registered users, we will send a notice to you by email, push notification or text.	
81 | 
82 |       The above was created using [PrivacyChoice's templates](http://www.privacychoice.org/resources).  It is provided under the [Creative Commons BY 2.0 license](http://creativecommons.org/licenses/by/2.0/).
83 | 
--------------------------------------------------------------------------------
/privacy.html:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 |   
 4 |     (Yet Another) X-Wing Miniatures Squad Builder Privacy Policy 
 5 |      
 6 |   
 7 |   
 8 |     Yet Another Privacy Policy 
 9 |     
10 |     Data 
11 |     
12 |     We only collect anonymous information. 
13 |     
14 |     We use technologies like cookies (small files stored by your browser), web beacons, or unique device identifiers to anonymously identify your computer or device so we can deliver a better experience. Our systems also log information like your browser, operating system.
15 |     
16 |     We do not collect personally identifiable information about you. In other words, we do not collect information such as your name, address, phone number, full IP address or email address.
17 |     
18 |     We do not knowingly contact or collect personal information from children under 13. If you believe we have inadvertently collected such information, please contact us so we can promptly obtain parental consent or remove the information.
19 |     
20 |     Location 
21 |     
22 |     We do not store or share your precise location. 
23 |     
24 |     We do not use or collect your precise geographic location.  
25 |     
26 |     Access 
27 |     
28 |     You can request to see your personal data. 
29 |     
30 |     You can sign into your account to see any personally identifiable information we have stored, such as your name, email, address or phone number. You can also contact us by email to request to see this information.
31 |     
32 |     That is, if we actually stored it, which we don't.  So there isn't any personal data to be gotten.
33 |     
34 |     Deletion 
35 |     
36 |     We may keep data indefinitely. 
37 |     
38 |     We may keep data indefinitely.  
39 |     
40 |     Sharing 
41 |     
42 |     We don't share your personal data with other companies. 
43 |     
44 |     We do not share personally identifiable information (such as name, address, email or phone) with other companies. 
45 |     
46 |     This is because, as mentioned above, we don't collect this information at all.
47 |     
48 |     Ad Tracking 
49 |     
50 |     No ad companies collect data through our service. 
51 |     
52 |     We do not allow advertising companies to collect data through our service for ad targeting. 
53 |     
54 |     Contact 
55 |     
56 |     You can ask privacy questions. 
57 |     
58 |     If you have any questions or concerns about our privacy policies, please contact us .
59 |     
60 |     Vendors 
61 |     
62 |     Service providers access data on our behalf. 
63 |     
64 |     In order to serve you, we may share anonymous information with other companies, including vendors and contractors. Their use of information is limited to these purposes, and subject to agreements that require them to keep the information confidential. Our vendors provide assurance that they take reasonable steps to safeguard the data they hold on our behalf, although data security cannot be guaranteed.
65 |     
66 |     Analytics companies may access anonymous data (such as partial IP address) to help us understand how our services are used. They use this data solely on our behalf. They do not share it except in aggregate form; no data is shared as to any individual user.
67 |     
68 |     Security 
69 |     
70 |     We take steps to protect personal information. 
71 |     
72 |     We take reasonable steps to secure your personally identifiable information against unauthorized access or disclosure. However, no security or encryption method can be guaranteed to protect information from hackers or human error.
73 |     
74 |     Information we collect may be stored or processed on computers located in any country where we do business. 
75 |     
76 |     Special 
77 |     
78 |     Special situations may require disclosure of your data. 
79 |     
80 |     To operate the service, we also may make identifiable and anonymous information available to third parties in these limited circumstances: (1) with your express consent, (2) when we have a good faith belief it is required by law, (3) when we have a good faith belief it is necessary to protect our rights or property, or (4) to any successor or purchaser in a merger, acquisition, liquidation, dissolution or sale of assets. Your consent will not be required for disclosure in these cases, but we will attempt to notify you, to the extent permitted by law to do so.   
81 |     
82 |     More 
83 |     
84 |     You can review more privacy-related information. 
85 |     
86 |     This privacy policy was last updated on 10 September 2019. Our privacy policy may change from time to time. If we make any material changes to our policies, we will place a prominent notice on our website or application. If the change materially affects registered users, we will send a notice to you by email, push notification or text. 
87 |     
88 |     The above was created using PrivacyChoice's templates .  It is provided under the Creative Commons BY 2.0 license .
89 |   
90 | 
91 | 
--------------------------------------------------------------------------------
/stylesheets/xwing-print.sass:
--------------------------------------------------------------------------------
  1 | $fancy-header-height: 0.375in
  2 | $header-circle-diameter: $fancy-header-height * 1.5
  3 | $header-circle-border-width: 0.0625in
  4 | 
  5 | $fancy-pilot-header-height: 0.3in
  6 | $pilot-circle-diameter: $fancy-pilot-header-height * 1.5
  7 | $pilot-circle-border-width: 0.0625in
  8 | 
  9 | $upgrade-circle-diameter: $pilot-circle-diameter * 0.75
 10 | $upgrade-circle-border-width: 0.0625in
 11 | 
 12 | body
 13 |   -webkit-print-color-adjust: exact
 14 |   color-adjust: exact !important
 15 |   background-color: white
 16 |   color: black
 17 |   zoom: 75%
 18 | 
 19 | .modal-backdrop
 20 |   display: none
 21 | 
 22 | .rebel
 23 |   border-bottom-color: #d73737 !important
 24 | 
 25 | .empire
 26 |   border-bottom-color: #2f4e9f !important
 27 | 
 28 | .scum
 29 |   border-bottom-color: #b79e33 !important
 30 | 
 31 | .rebel-outline
 32 |   border-bottom-color: #FFA500 !important
 33 | 
 34 | .firstorder
 35 |   border-bottom-color: #872424 !important
 36 | 
 37 | .republic
 38 |   border-bottom-color: #a17747 !important
 39 | 
 40 | .separatist
 41 |   border-bottom-color: #363ca3 !important
 42 | 
 43 | .rebel-pilot
 44 |   border-top-color: #d7373775 !important
 45 | 
 46 | .empire-pilot
 47 |   border-top-color: #2f4e9f75 !important
 48 | 
 49 | .scum-pilot
 50 |   border-top-color: #b79e3375 !important
 51 | 
 52 | .rebel-outline-pilot
 53 |   border-top-color: #FFA50075 !important
 54 | 
 55 | .firstorder-pilot
 56 |   border-top-color: #87242475 !important
 57 | 
 58 | .republic-pilot
 59 |   border-top-color: #a1774775 !important
 60 | 
 61 | .separatist-pilot
 62 |   border-top-color: #363ca375 !important
 63 | 
 64 | 
 65 | #printable
 66 |   overflow: hidden
 67 | 
 68 |   .bw
 69 |     .info-data
 70 |       color: black
 71 | 
 72 |     .fancy-pilot-stats
 73 |       .info-data
 74 |         color: white
 75 | 
 76 |       .xwing-miniatures-font
 77 |         color: black
 78 |       .red
 79 |         -webkit-text-stroke: 0.5px black
 80 |         color: white
 81 |       .force
 82 |         color: gray
 83 | 
 84 |     .fancy-dial
 85 |       .svg-maneuver-triangle.svg-base-maneuver
 86 |         fill: black
 87 |         stroke: black
 88 |       .svg-maneuver-triangle.svg-modified-maneuver
 89 |         fill: black
 90 |         stroke: gray
 91 |       .svg-maneuver-inner.svg-white-maneuver
 92 |         stroke: white
 93 |       .svg-maneuver-inner.svg-blue-maneuver
 94 |         stroke: gray
 95 |       .svg-maneuver-inner.svg-red-maneuver
 96 |         stroke: black
 97 |       .svg-maneuver-inner.svg-purple-maneuver
 98 |         stroke: grey
 99 |       .svg-maneuver-outer.svg-base-maneuver
100 |         stroke: black
101 |       .svg-maneuver-outer.svg-modified-maneuver
102 |         stroke: gray
103 |       .svg-maneuver-stop.svg-red-maneuver
104 |         fill: black !important
105 |       .svg-maneuver-stop.svg-purple-maneuver
106 |         fill: black !important
107 |       .svg-maneuver-stop.svg-white-maneuver
108 |         fill: white !important
109 |         stroke: black !important
110 |       .svg-maneuver-stop.svg-blue-maneuver
111 |         fill: gray !important
112 |         stroke: black !important
113 |       .svg-maneuver-stop.svg-modified-maneuver
114 |         stroke: gray !important
115 |         stroke-width: 10px
116 |       .svg-maneuver-stop.svg-base-maneuver
117 |         stroke: black !important
118 |         stroke-width: 10px
119 | 
120 |     .fancy-dial table > tbody > tr > td ~ td
121 |       background-color: white !important
122 | 
123 |     .fancy-dial table > tbody > tr > td
124 |       border: 2px solid gray !important
125 | 
126 |     i.xwing-miniatures-font-agility, i.xwing-miniatures-font-hull, i.xwing-miniatures-font-energy, i.xwing-miniatures-font-shield, i.xwing-miniatures-font-attack-bullseye, i.xwing-miniatures-font-forcecharge, i.xwing-miniatures-font-charge, i.xwing-miniatures-font-doubleturretarc, i.xwing-miniatures-font-singleturretarc, i.xwing-miniatures-font-frontarc, i.xwing-miniatures-font-reararc, i.xwing-miniatures-font-fullfrontarc
127 |       background: white
128 |     
129 |     .upgrade-attack
130 |       .xwing-miniatures-font-attack, i.xwing-miniatures-font-doubleturretarc, i.xwing-miniatures-font-singleturretarc, i.xwing-miniatures-font-frontarc, i.xwing-miniatures-font-reararc, i.xwing-miniatures-font-fullfrontarc 
131 |         background: black
132 |         color: white
133 | 
134 |     .upgrade-energy
135 |       .xwing-miniatures-font-energy
136 |         background: black
137 |         color: white
138 | 
139 |     .upgrade-force
140 |       .xwing-miniatures-font-forcecharge
141 |         background: black
142 |         color: white
143 |         
144 |     .upgrade-charge
145 |       .xwing-miniatures-font-charge
146 |         background: black
147 |         color: white
148 |         
149 |   .info-data
150 |     vertical-align: middle
151 |     -webkit-text-stroke: 0.5px black
152 |     font-size: $fancy-pilot-header-height * 0.75 !important
153 |     position: relative
154 | 
155 |   .fancy-header
156 |     border: $fancy-header-height solid #4e4e4e
157 |     color: white !important
158 |     border-left-color: transparent
159 |     border-top-color: transparent
160 |     border-right-color: transparent
161 |     font-family: EurostileStandard, Impact, sans-serif
162 | 
163 |     .squad-name
164 |       position: absolute
165 |       font-size: 0.3in
166 |       font-weight: 100
167 |     
168 |       .xwing-miniatures-font
169 |         position: relative
170 |         bottom: 0.04in
171 |         font-size: 0.24in
172 | 
173 |     .squad-faction
174 |       position: absolute
175 |       margin-top: 0.04in
176 |       right: 0.7in
177 |       font-weight: 100
178 | 
179 |       .xwing-miniatures-font
180 |         font-size: $fancy-header-height * 0.7
181 | 
182 |     .mask
183 |       position: absolute
184 |       right: -0.25in
185 |       width: $header-circle-diameter
186 |       background-color: white
187 |       height: $header-circle-diameter
188 |       z-index: 999
189 | 
190 |     .outer-circle
191 |       width: $header-circle-diameter
192 |       height: $header-circle-diameter
193 |       border-radius: calc($header-circle-diameter/2)
194 |       margin-left: -1*calc($header-circle-diameter/2)
195 |       background-color: white
196 | 
197 |       .inner-circle
198 |         width: $header-circle-diameter - $header-circle-border-width
199 |         height: $header-circle-diameter - $header-circle-border-width
200 |         border-radius: calc(($header-circle-diameter - $header-circle-border-width)/2)
201 |         background-color: gray
202 |         position: relative
203 |         top: calc($header-circle-border-width/2)
204 |         left: calc($header-circle-border-width/2)
205 |         line-height: $header-circle-diameter - $header-circle-border-width
206 |         font-size: calc($fancy-header-height/2)
207 |         text-align: center
208 | 
209 |   .fancy-under-header
210 |     border: calc($fancy-header-height/2) solid gray
211 |     border-left-color: transparent
212 |     border-bottom-color: transparent
213 |     border-right-color: transparent
214 |     position: relative
215 |     left: $fancy-header-height
216 | 
217 |   .fancy-ship
218 |     overflow: hidden
219 |     margin-bottom: 10px
220 |     page-break-inside: avoid
221 |     position: relative
222 | 
223 |     .fancy-pilot-header
224 |       border: $fancy-pilot-header-height solid lightgray
225 |       color: black
226 |       border-left-color: transparent
227 |       border-bottom-color: transparent
228 |       border-right-color: transparent
229 |       font-family: EurostileStandard, Impact, sans-serif
230 |       height: 0px
231 | 
232 |       .pilot-header-text
233 |         position: absolute
234 |         font-size: $fancy-pilot-header-height * 0.75
235 |         margin-top: -($fancy-pilot-header-height * 1.3)
236 |         font-weight: 100
237 | 
238 |         .fancy-ship-type
239 |           font-style: italic
240 |           font-variant: small-caps
241 |           font-size: $fancy-pilot-header-height * 0.6
242 | 
243 |       .mask
244 |         position: relative
245 |         float: right
246 |         clear: both
247 |         right: -$pilot-circle-diameter
248 |         top: -$fancy-pilot-header-height
249 |         width: $pilot-circle-diameter
250 |         background-color: white
251 |         height: $fancy-pilot-header-height * 2.2
252 |         z-index: 999
253 | 
254 |       .outer-circle
255 |         width: $pilot-circle-diameter
256 |         height: $pilot-circle-diameter
257 |         border-radius: calc($pilot-circle-diameter/2)
258 |         margin-left: -1*calc($pilot-circle-diameter/2)
259 |         background-color: white
260 | 
261 |         .inner-circle
262 |           width: $pilot-circle-diameter - $pilot-circle-border-width
263 |           height: $pilot-circle-diameter - $pilot-circle-border-width
264 |           border-radius: calc(($pilot-circle-diameter - $pilot-circle-border-width)/2)
265 |           background-color: gray
266 |           position: relative
267 |           top: calc($pilot-circle-border-width/2)
268 |           left: calc($pilot-circle-border-width/2)
269 |           line-height: $pilot-circle-diameter - calc($pilot-circle-border-width/2)
270 |           font-size: calc($fancy-pilot-header-height/2)
271 |           text-align: center
272 |           color: white
273 | 
274 |     .fancy-pilot-stats
275 |       position: relative
276 |       left: $fancy-pilot-header-height
277 |       top: -$fancy-pilot-header-height
278 |       border: $fancy-pilot-header-height solid gray
279 |       border-left-color: transparent
280 |       border-bottom-color: transparent
281 |       border-right-color: transparent
282 |       margin-bottom: -0.5in
283 | 
284 |       .pilot-stats-content
285 |         position: relative
286 |         margin-top: -0.27in
287 |         
288 |         .xwing-miniatures-font
289 |           vertical-align: middle
290 |         .action
291 |           color: black
292 | 
293 |       .info-data, .xwing-miniatures-font
294 |         position: relative
295 |         bottom: $fancy-pilot-header-height * 0.16
296 | 
297 |     .fancy-pilot-text, .fancy-pilot-chassis
298 |       margin-left: $fancy-pilot-header-height * 2
299 |       padding: 5px
300 |       color: black
301 |       font-size: 0.18in
302 |       margin-bottom: 0.2in
303 | 
304 |     .fancy-upgrade-container
305 |       color: black
306 |       position: relative
307 |       margin-left: 0.365in
308 |       margin-right: 0.365in
309 |       // margin-left: $fancy-pilot-header-height
310 |       margin-bottom: 10px
311 |       // padding-top: 10px
312 |       // padding-bottom: 1px
313 | 
314 |       .wide
315 |         width: 60% !important
316 | 
317 |       .upgrade-container
318 |         width: 49%
319 |         display: inline-block
320 |         vertical-align: top
321 |         position: relative
322 |         margin-left: 0.04in
323 |         margin-right: 0.04in
324 |         margin-bottom: 0.04in
325 |         font-size: 0.163in
326 |         border: 1px dotted lightgray
327 |         clear: both
328 | 
329 |         .upgrade-stats
330 |           min-height: 0.38in
331 | 
332 |           .upgrade-name
333 |             font-size: 0.19in
334 | 
335 |         .card-restriction-container
336 |           padding-top: 0.10in
337 | 
338 |         .mask
339 |           float: right
340 |           text-align: right
341 |           display: inline-block
342 |           vertical-align: middle
343 |           width: $upgrade-circle-diameter
344 |           height: $upgrade-circle-diameter * 1.1
345 |           z-index: 999
346 |           margin-right: 0.04in
347 | 
348 |         .outer-circle
349 |           width: $upgrade-circle-diameter
350 |           height: $upgrade-circle-diameter
351 |           border-radius: calc($upgrade-circle-diameter/2)
352 |           background-color: white
353 | 
354 |           .inner-circle
355 |             width: $upgrade-circle-diameter - $upgrade-circle-border-width
356 |             height: $upgrade-circle-diameter - $upgrade-circle-border-width
357 |             border-radius: calc(($upgrade-circle-diameter - $upgrade-circle-border-width)/2)
358 |             background-color: gray
359 |             position: relative
360 |             top: calc($upgrade-circle-border-width/2)
361 |             left: calc($upgrade-circle-border-width/2)
362 |             line-height: $upgrade-circle-diameter
363 |             font-size: calc($fancy-pilot-header-height/2)
364 |             text-align: center
365 |             color: white
366 | 
367 |         .upgrade-name
368 |           display: inline-block
369 |           vertical-align: middle
370 |           line-height: $upgrade-circle-diameter
371 |           float: left
372 |           text-align: left
373 |           margin-left: 0.10in
374 |           margin-right: 0.05in
375 |           min-width: 1.50in
376 |           font-family: EurostileStandardBold
377 | 
378 |           i
379 |             display: inline-block
380 |             min-width: 0.27in
381 | 
382 |         .upgrade-attack, .upgrade-energy, .upgrade-charge, .upgrade-force
383 |           float: right
384 |           text-align: right
385 |           margin-right: 0.07in
386 |           margin-top: 0.02in
387 |           height: 0.28in
388 | 
389 |           .upgrade-attack-range
390 |             vertical-align: middle
391 |             padding: 2px 8px
392 |             color: white
393 |             background-color: black
394 |             font-family: kimberley
395 |             font-size: 1.2em
396 | 
397 |           .upgrade-attack-rangebonus
398 |             vertical-align: middle
399 |             padding: 2px 8px
400 |             color: white
401 |             background-color: black
402 |             font-family: kimberley
403 |             font-size: 1.2em
404 |             
405 |           .xwing-miniatures-font-attack, .xwing-miniatures-font-attack-turret, .xwing-miniatures-font-attack-frontback, .xwing-miniatures-font-attack-180, i.xwing-miniatures-font-attack-bullseye, i.xwing-miniatures-font-forcecharge, i.xwing-miniatures-font-charge, i.xwing-miniatures-font-doubleturretarc, i.xwing-miniatures-font-singleturretarc, i.xwing-miniatures-font-frontarc, i.xwing-miniatures-font-reararc 
406 |             vertical-align: middle
407 | 
408 |           .info-attack
409 |             margin-right: 0.02in
410 | 
411 |         .upgrade-text
412 |           padding-right: 0.1in
413 |           padding-left: 0.27in
414 |           margin-left: 0.10in
415 | 
416 |     .ship-points-total
417 |       color: black
418 |       text-align: right
419 |       margin-bottom: 0.04in
420 |       margin-left: 0.75in
421 |       margin-right: 0.365in
422 |       clear: both
423 | 
424 |   .print-dials-container
425 |     overflow: auto 
426 |     text-align: center
427 |     page-break-inside: avoid
428 | 
429 |     .fancy-dial
430 |       padding: 5px
431 |       table-layout: fixed
432 |       display: inline-block
433 | 
434 |       .ship-name-dial
435 |         color: black
436 |   
437 |     .fancy-dial table > tbody > tr > td
438 |       border: 2px solid #d6c9d2
439 |   
440 |     .fancy-dial table > tbody > tr > td:first-child
441 |       color: white
442 |       text-align: center
443 |       padding: 3px
444 |       background-color: #888888
445 |       background-image: linear-gradient(rgba(45, 45, 45, .2) 50%, transparent 50%, transparent)
446 |       background-size: 5px 5px
447 |   
448 |     .fancy-dial table > tbody > tr > td ~ td
449 |       background-color: #a29199
450 |   
451 |   .printable-footer
452 |     position: fixed
453 |     bottom: 0
454 |     color: black
455 |     width: 8.5in
456 |     text-align: right
457 |     display: none
458 | 
459 |   .simple-table
460 |     font-family: Arial,Helvetica,sans-serif
461 |     font-size: 1.25em
462 |     color: black
463 |     width: 95%
464 |     font-size: 1.5em
465 | 
466 |     tr
467 |       height: 1.25em
468 | 
469 |     .name
470 |       font-style: oblique
471 | 
472 |     .points
473 |       text-align: right
474 | 
475 |     .simple-pilot
476 |       .name
477 |         font-weight: bold
478 | 
479 |     .simple-addon
480 |       .name
481 |         padding-left: 20px
482 | 
483 |     .simple-ship-total
484 |       font-weight: bold
485 |       text-align: right
486 | 
487 |   .print-notes
488 |     color: black
489 |     
490 |   .version
491 |     position: relative
492 |     bottom: 0.2in
493 |     color: white
494 | 
495 |   .qrcode-container
496 |     color: black
497 |     width: 7in
498 |     margin-left: auto
499 |     margin-right: auto
500 |     page-break-inside: avoid
501 |     top: 0
502 |     bottom: 0
503 |     left: 0
504 |     right: 0
505 | 
506 |   .qrcode-container:before
507 |     content: ''
508 |     display: inline-block
509 |     vertical-align: middle
510 |     height: 100%
511 | 
512 |   .qrcode-container > div
513 |     display: inline-block
514 |     vertical-align: middle
515 | 
516 |   .qrcode-text
517 |     width: 3.25in
518 |     text-align: center
519 | 
520 |   .qrcode
521 |     width: 144px
522 |     margin-left: auto
523 |     margin-right: auto
524 | 
525 |   .obstacles
526 |     color: black
527 |     page-break-inside: avoid
528 | 
529 |   .obstacles > div
530 |     width: 6in
531 |     text-align: center
532 |     margin-left: auto
533 |     margin-right: auto
534 | 
535 | .conditions-container
536 |   width: 6in
537 | 
538 | .condition
539 |   float: left
540 |   width: 2.5in
541 |   margin: 0.125in
542 |   padding: 1em
543 |   border-radius: 10px
544 |   border: thin solid black
545 |   background: white
546 |   color: black
547 |   page-break-inside: avoid
548 | 
549 |   > .name
550 |     font-family: EurostileStandardBold
551 |     font-weight: 100
552 |     font-style: italic
553 | 
--------------------------------------------------------------------------------
/stylesheets/xwing-screen.sass:
--------------------------------------------------------------------------------
  1 | $fancy-header-height: 40px
  2 | $header-circle-diameter: $fancy-header-height * 1.5
  3 | $header-circle-border-width: 10px
  4 | 
  5 | $fancy-pilot-header-height: 34px
  6 | $pilot-circle-diameter: $fancy-pilot-header-height * 1.5
  7 | $pilot-circle-border-width: 10px
  8 | 
  9 | $upgrade-circle-diameter: $pilot-circle-diameter * 0.75
 10 | $upgrade-circle-border-width: 5px
 11 | 
 12 | // make sure all print options fit in one row for 360px mobile
 13 | @media (max-width: 400px) and (min-width:350px)
 14 |   .modal-dialog
 15 |     margin: calc(min(.5rem, (100vw - 350px)*0.5))
 16 | 
 17 | .text-list-modal .modal-header
 18 |   overflow: hidden
 19 | 
 20 | .btn-primary
 21 |   background-color: #337ab7
 22 | 
 23 | .column
 24 |   flex: 50%
 25 |   padding-right: 10px
 26 | 
 27 | .fancy-header
 28 |   border: $fancy-header-height solid black
 29 |   border-left-color: transparent
 30 |   border-top-color: transparent
 31 |   border-right-color: transparent
 32 |   font-family: BankGothicHD, Impact, sans-serif
 33 | 
 34 |   .squad-name
 35 |     position: absolute
 36 |     font-size: $fancy-header-height * 0.8
 37 |     margin-top: $fancy-header-height * 0.2
 38 |     font-weight: 100
 39 | 
 40 |   .mask
 41 |     position: absolute
 42 |     right: 0
 43 |     width: $header-circle-diameter
 44 |     background-color: white
 45 |     height: $header-circle-diameter
 46 |     z-index: 999
 47 | 
 48 |   .outer-circle
 49 |     width: $header-circle-diameter
 50 |     height: $header-circle-diameter
 51 |     border-radius: calc($header-circle-diameter/2)
 52 |     margin-left: calc($header-circle-diameter/2)*-1
 53 |     background-color: white
 54 | 
 55 |     .inner-circle
 56 |       width: $header-circle-diameter - $header-circle-border-width
 57 |       height: $header-circle-diameter - $header-circle-border-width
 58 |       border-radius: calc(($header-circle-diameter - $header-circle-border-width)/2)
 59 |       background-color: gray
 60 |       position: relative
 61 |       top: calc($header-circle-border-width/2)
 62 |       left: calc($header-circle-border-width/2)
 63 |       line-height: $header-circle-diameter - $header-circle-border-width
 64 |       font-size: calc($fancy-header-height/2)
 65 |       text-align: center
 66 | 
 67 | .fancy-under-header
 68 |   border: calc($fancy-header-height/2) solid gray
 69 |   border-left-color: transparent
 70 |   border-bottom-color: transparent
 71 |   border-right-color: transparent
 72 |   position: relative
 73 |   left: $fancy-header-height
 74 | 
 75 | .fancy-ship
 76 |   overflow: hidden
 77 |   margin-bottom: 10px
 78 | 
 79 |   .fancy-pilot-header
 80 |     border: $fancy-pilot-header-height solid lightgray
 81 |     color: black
 82 |     border-left-color: transparent
 83 |     border-bottom-color: transparent
 84 |     border-right-color: transparent
 85 |     font-family: EurostileStandard, Impact, sans-serif
 86 |     height: 0px
 87 | 
 88 |     .pilot-header-text
 89 |       position: absolute
 90 |       font-size: $fancy-pilot-header-height * 0.8
 91 |       margin-top: -($fancy-pilot-header-height * 1.3)
 92 |       font-weight: 100
 93 | 
 94 |       .fancy-ship-type
 95 |         display: none
 96 | 
 97 |     .mask
 98 |       position: relative
 99 |       float: right
100 |       clear: both
101 |       right: -$pilot-circle-diameter
102 |       top: -$fancy-pilot-header-height
103 |       width: $pilot-circle-diameter
104 |       background-color: white
105 |       height: $fancy-pilot-header-height * 2
106 |       z-index: 999
107 | 
108 |     .outer-circle
109 |       width: $pilot-circle-diameter
110 |       height: $pilot-circle-diameter
111 |       border-radius: calc($pilot-circle-diameter/2)
112 |       margin-left: calc($pilot-circle-diameter/2)*-1
113 |       background-color: white
114 | 
115 |       .inner-circle
116 |         width: $pilot-circle-diameter - $pilot-circle-border-width
117 |         height: $pilot-circle-diameter - $pilot-circle-border-width
118 |         border-radius: calc(($pilot-circle-diameter - $pilot-circle-border-width)/2)
119 |         background-color: gray
120 |         position: relative
121 |         top: calc($pilot-circle-border-width/2)
122 |         left: calc($pilot-circle-border-width/2)
123 |         line-height: $pilot-circle-diameter - calc($pilot-circle-border-width/2)
124 |         font-size: calc($fancy-pilot-header-height/2)
125 |         text-align: center
126 |         color: white
127 | 
128 |   .fancy-pilot-stats
129 |     position: relative
130 |     left: $fancy-pilot-header-height
131 |     top: -$fancy-pilot-header-height
132 |     border: $fancy-pilot-header-height solid gray
133 |     border-left-color: transparent
134 |     border-bottom-color: transparent
135 |     border-right-color: transparent
136 |     margin-bottom: -$fancy-pilot-header-height * 2
137 | 
138 |     .pilot-stats-content
139 |       position: relative
140 |       margin-top: -$fancy-pilot-header-height + 2
141 |       
142 |       .xwing-miniatures-font
143 |         vertical-align: middle
144 |   
145 |   .expanded-hull-or-shield
146 |     display: none
147 | 
148 |   .fancy-dial
149 |     display: none
150 |     float: right
151 |     padding: 10px
152 |     table-layout: fixed
153 | 
154 |   .fancy-dial table > tbody > tr > td
155 |     border: 2px solid #d6c9d2
156 | 
157 |   .fancy-dial table > tbody > tr > td:first-child
158 |     color: white
159 |     text-align: center
160 |     padding: 3px
161 |     background-color: #888888
162 |     background-image: linear-gradient(rgba(45, 45, 45, .2) 50%, transparent 50%, transparent)
163 |     background-size: 5px 5px
164 | 
165 |   .fancy-dial table > tbody > tr > td ~ td
166 |     background-color: #a29199
167 | 
168 |   .fancy-pilot-text, .fancy-pilot-chassis
169 |     clear: both
170 |     margin-left: $fancy-pilot-header-height * 2
171 |     padding: 5px
172 |     width: 80%
173 | 
174 |   .fancy-upgrade-container
175 |     color: black
176 |     position: relative
177 |     // margin-left: $fancy-pilot-header-height
178 |     // margin-bottom: 10px
179 |     // padding-top: 10px
180 |     // padding-bottom: 1px
181 | 
182 |     .upgrade-container
183 |       position: relative
184 |       padding-bottom: 3px
185 |       margin-left: 60px
186 |       margin-bottom: 5px
187 |       margin-right: 30px
188 |       clear: both
189 |       border: 1px dotted lightgray
190 | 
191 |       .upgrade-stats
192 |         min-height: 38px
193 | 
194 |       .card-restriction-container
195 |         padding-top: 10px
196 | 
197 |       .mask
198 |         float: right
199 |         text-align: right
200 |         margin-left: 10px
201 |         display: inline-block
202 |         vertical-align: middle
203 |         width: $upgrade-circle-diameter
204 |         height: $upgrade-circle-diameter
205 |         z-index: 999
206 |         margin-right: 5px
207 | 
208 |       .outer-circle
209 |         width: $upgrade-circle-diameter
210 |         height: $upgrade-circle-diameter
211 |         border-radius: calc($upgrade-circle-diameter/2)
212 |         background-color: white
213 | 
214 |         .inner-circle
215 |           width: $upgrade-circle-diameter - $upgrade-circle-border-width
216 |           height: $upgrade-circle-diameter - $upgrade-circle-border-width
217 |           border-radius: calc(($upgrade-circle-diameter - $upgrade-circle-border-width)/2)
218 |           background-color: gray
219 |           position: relative
220 |           top: calc($upgrade-circle-border-width/2)
221 |           left: calc($upgrade-circle-border-width/2)
222 |           line-height: $upgrade-circle-diameter
223 |           font-size: calc($fancy-pilot-header-height/2)
224 |           text-align: center
225 |           color: white
226 | 
227 |       .upgrade-name
228 |         display: inline-block
229 |         vertical-align: middle
230 |         line-height: $upgrade-circle-diameter
231 |         float: left
232 |         text-align: left
233 |         margin-left: 10px
234 |         margin-right: 5px
235 |         min-width: 150px
236 |         font-family: EurostileStandardBold
237 | 
238 |         i
239 |           display: inline-block
240 |           min-width: 26px
241 | 
242 |       .upgrade-attack, .upgrade-energy, .upgrade-charge, .upgrade-force
243 |         float: right
244 |         text-align: right
245 |         margin-top: 4px
246 |         margin-right: 8px
247 |         height: 28px
248 | 
249 |       .upgrade-attack-range
250 |           vertical-align: middle
251 |           padding: 2px 8px
252 |           color: white
253 |           background-color: black
254 |           font-family: kimberley
255 |           font-size: 1.2em
256 | 
257 |       .upgrade-attack-rangebonus
258 |           vertical-align: middle
259 |           padding: 2px 8px
260 |           color: red
261 |           background-color: black
262 |           font-family: kimberley        
263 |         
264 |       .info-attack
265 |           margin-right: 2px
266 | 
267 |       .xwing-miniatures-font
268 |           vertical-align: middle
269 | 
270 |       .upgrade-text
271 |         padding-right: $upgrade-circle-diameter
272 |         padding-left: 26px
273 |         margin-left: 10px
274 | 
275 |   .ship-points-total
276 |     text-align: right
277 |     padding-bottom: 3px
278 |     margin-left: 60px
279 |     margin-bottom: 5px
280 |     margin-right: 30px
281 |     clear: both
282 | 
283 | .bbcode-list textarea, textarea.xws-content, .html-list textarea, .reddit-list textarea, .tts-list textarea, .xws-list textarea, .simplecopy-list textarea
284 |   width: 95%
285 |   height: 200px
286 |   cursor: text
287 | 
288 | .qrcode-container
289 |   flex: inherit
290 | 
291 | .indent
292 |   padding-left: 10px  
293 | 
294 | .condition
295 |   float: left
296 |   width: 24%
297 |   min-width: 20em
298 |   max-width: 30em
299 |   margin: 5px
300 |   padding: 1em
301 |   border-radius: 10px
302 |   background: white
303 |   color: black
304 | 
305 |   > .name
306 |     font-family: EurostileStandardBold
307 |     font-weight: 100
308 |     font-style: italic
309 | 
310 | .obstacle-select-container
311 |   float: left
312 | 
313 | .obstacle-image-container
314 |   justify-content: center
315 |   display: flex
316 |   background-repeat: no-repeat
317 | 
318 | .obstacle-sources-container
319 |   display: flex
320 | 
321 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 2dppx) 
322 |     .select2-container .select2-choice abbr
323 |         width: 20px
324 |         height: 20px
325 |         right: 20px
326 |         top: 2px
327 |         background-image: url('data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjIuODggMTIyLjg4Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2Y0NDMzNjtmaWxsLXJ1bGU6ZXZlbm9kZDt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPmNsb3NlLXJlZDwvdGl0bGU+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNjEuNDQsMEE2MS40NCw2MS40NCwwLDEsMSwwLDYxLjQ0LDYxLjQ0LDYxLjQ0LDAsMCwxLDYxLjQ0LDBaTTc0LjU4LDM2LjhjMS43NC0xLjc3LDIuODMtMy4xOCw1LTFsNyw3LjEzYzIuMjksMi4yNiwyLjE3LDMuNTgsMCw1LjY5TDczLjMzLDYxLjgzLDg2LjA4LDc0LjU4YzEuNzcsMS43NCwzLjE4LDIuODMsMSw1bC03LjEzLDdjLTIuMjYsMi4yOS0zLjU4LDIuMTctNS42OCwwTDYxLjQ0LDczLjcyLDQ4LjYzLDg2LjUzYy0yLjEsMi4xNS0zLjQyLDIuMjctNS42OCwwbC03LjEzLTdjLTIuMi0yLjE1LS43OS0zLjI0LDEtNWwxMi43My0xMi43TDM2LjM1LDQ4LjY0Yy0yLjE1LTIuMTEtMi4yNy0zLjQzLDAtNS42OWw3LTcuMTNjMi4xNS0yLjIsMy4yNC0uNzksNSwxTDYxLjQ0LDQ5Ljk0LDc0LjU4LDM2LjhaIi8+PC9zdmc+')!important
328 |         background-size: 20px 20px !important
329 |     .select2-container .select2-choice abbr:hover
330 |         background-position: right 0px
331 | 
--------------------------------------------------------------------------------
/stylesheets/xwing.sass:
--------------------------------------------------------------------------------
  1 | $pilot_skill_color: #CD6D2D
  2 | $attack_color: #EF232B
  3 | $energy_color: #C7B5E2
  4 | $agility_color: #6BBE44
  5 | $hull_color: #B6B335
  6 | $shields_color: #7ED3E5
  7 | $force_color: #9D899D
  8 | $charge_color: #C2B230
  9 | 
 10 | @font-face
 11 |   font-family: kimberley
 12 |   src: url('../fonts/kimberley bl.ttf')
 13 | 
 14 | @font-face
 15 |   font-family: EurostileStandard
 16 |   src: url('../fonts/EurostileLTStd.otf')
 17 | 
 18 | @font-face
 19 |   font-family: EurostileStandardBold
 20 |   src: url('../fonts/EurostileLTStd-Bold.otf')
 21 | 
 22 | @font-face
 23 |   font-family: EurostileStandardOblique
 24 |   src: url('../fonts/EurostileLTStd-Oblique.otf')
 25 | 
 26 | @font-face
 27 |   font-family: EurostileStandardBoldOblique
 28 |   src: url('../fonts/EurostileLTStd-BoldOblique.otf')
 29 | 
 30 | @font-face
 31 |   font-family: BankGothicMediumBT
 32 |   src: url('../fonts/Bank Gothic Medium BT.ttf')
 33 | 
 34 | @font-face
 35 |   font-family: BankGothicHD
 36 |   src: url('../fonts/bankgthd.ttf')
 37 | 
 38 | body
 39 |   background-color: #202020
 40 |   font-family: EurostileStandard
 41 |   color: white
 42 |   overflow-x: hidden
 43 |   overflow-y: scroll
 44 |   font-size: 0.9em
 45 | 
 46 | .notes-container
 47 |   padding-right: 0px
 48 |   padding-left: 0px
 49 | 
 50 | .btn
 51 |   font-size: 1em
 52 | 
 53 | .btn-inverse, .btn-modal:hover
 54 |   font-size: 1em
 55 |   background-color: #337ab7
 56 |   color: white
 57 | 
 58 | 
 59 | .button-container
 60 |   padding-right: 0px
 61 | 
 62 | button
 63 |   font-family: EurostileStandard
 64 | 
 65 | strong
 66 |   font-family: EurostileStandardBold
 67 |   font-weight: normal
 68 | 
 69 | [tooltip]:before
 70 |   position: absolute
 71 |   content: attr(tooltip)
 72 |   opacity: 0
 73 | 
 74 | [tooltip]:hover:before
 75 |   opacity: 1
 76 | 
 77 | .squad-description .span4
 78 |   text-align: right
 79 | 
 80 | .div .tags-display, .div .squad-display-mode
 81 |   overflow-x: scroll
 82 | 
 83 | em
 84 |   font-family: EurostileStandardOblique
 85 |   font-style: normal
 86 | 
 87 | strong em, em strong
 88 |   font-family: EurostileStandardBoldOblique
 89 |   font-style: normal
 90 |   font-weight: normal
 91 | 
 92 | @media (max-width: 768px)
 93 |   .side-button
 94 |     margin-top: 5px
 95 |   .hide-on-mobile
 96 |     display: none
 97 |   .squad-name-container
 98 |    text-align: center
 99 |   .squad-name-and-points-row
100 |     gap: 4px
101 |   .display-name
102 |     margin: 4px
103 |   .dropdown-menu-right
104 |     margin-right: 2px
105 |   .condition
106 |     width: 20em
107 | 
108 | .flavor_text 
109 |   display: none
110 | 
111 | .xwing-card-browser .flavor_text
112 |   display: unset
113 | 
114 | .ship-container > .row
115 |   padding: 10px 0px
116 | 
117 | .right-col
118 |   text-align: right
119 |     
120 | .full-row
121 |   width: 100%
122 |     
123 | .card-stat
124 |   font-family: kimberley
125 |   font-size: 1.5em
126 | 
127 | .info-data.info-skill, .info-data.info-engagement
128 |   @extend .card-stat
129 |   color: $pilot_skill_color
130 | 
131 | .info-data-red
132 |   color: $attack_color
133 | 
134 | .card-icon
135 |   background: black
136 |   border-radius: 50%
137 |   padding: 2px
138 |   font-weight: normal
139 | 
140 | .info-upgrades
141 |   cellspacing: 3px
142 |     
143 | td.info-header
144 |   width: 50px
145 |   padding: 3px
146 | 
147 | i.xwing-miniatures-font
148 |   line-height: 20px
149 |     
150 | i.xwing-miniatures-font-focus
151 |   font-size: 0.8em
152 | 
153 | i.xwing-miniatures-font-rebel, i.xwing-miniatures-font-empire, i.xwing-miniatures-font-scum, i.xwing-miniatures-font-rebel-outline, i.xwing-miniatures-font-firstorder, i.xwing-miniatures-font-republic, i.xwing-miniatures-font-separatists
154 |   font-size: 2.3em !important
155 | 
156 | i.xwing-miniatures-font-attack, i.xwing-miniatures-font-attack-turret, i.xwing-miniatures-font-attack-frontback, i.xwing-miniatures-font-attack-180
157 |   @extend .card-icon
158 |   color: $attack_color
159 | 
160 | i.header-attack
161 |   @extend .card-icon
162 |   color: $attack_color
163 | 
164 | i.xwing-miniatures-font-frontarc, i.xwing-miniatures-font-reararc, i.xwing-miniatures-font-bullseyearc, i.xwing-miniatures-font-fullfrontarc, i.xwing-miniatures-font-rightarc, i.xwing-miniatures-font-leftarc
165 |   padding-left: 9px
166 |   padding-right: 9px
167 |   padding-bottom: 7px
168 |   padding-top: 7px
169 | 
170 | i.xwing-miniatures-font-singleturretarc, i.xwing-miniatures-font-doubleturretarc
171 |   padding-left: 11px
172 |   padding-right: 11px
173 |   padding-bottom: 7px
174 |   padding-top: 7px
175 | 
176 | i.xwing-miniatures-font-rangebonusindicator
177 |   font-size: 1.1em
178 | 
179 | i.header-energy
180 |   @extend .card-icon
181 |   color: $energy_color
182 |   padding-left: 9px
183 |   padding-right: 9px
184 |   padding-bottom: 8px
185 | 
186 | i.header-agility
187 |   @extend .card-icon
188 |   color: $agility_color
189 |   padding-left: 7px
190 |   padding-right: 7px
191 |   padding-bottom: 6px
192 |   padding-top: 7px
193 | 
194 | i.header-hull
195 |   @extend .card-icon
196 |   color: $hull_color
197 |   padding-left: 10px
198 |   padding-right: 10px
199 |   padding-bottom: 7px
200 |   padding-top: 7px
201 | 
202 | i.header-shield
203 |   @extend .card-icon
204 |   color: $shields_color
205 |   padding-left: 8px
206 |   padding-right: 8px
207 |   padding-bottom: 8px
208 |   padding-top: 8px
209 | 
210 | i.header-force
211 |   @extend .card-icon
212 |   color: $force_color
213 |   padding-left: 7px
214 |   padding-right: 7px
215 |   padding-bottom: 7px
216 |   padding-top: 7px
217 | 
218 | i.header-charge
219 |   @extend .card-icon
220 |   color: $charge_color
221 |   padding-left: 9px
222 |   padding-right: 9px
223 |   padding-bottom: 7px
224 |   padding-top: 7px
225 | 
226 | i.header-range
227 |   vertical-align: middle
228 |   padding: 0px 3px
229 |   background-color: black
230 |   color: $attack_color
231 | 
232 | 
233 | .info-data.info-attack
234 |   @extend .card-stat
235 |   color: $attack_color
236 | 
237 | .info-data.info-energy
238 |   @extend .card-stat
239 |   color: $energy_color
240 | 
241 | .info-data.info-agility
242 |   @extend .card-stat
243 |   color: $agility_color
244 | 
245 | .info-data.info-hull
246 |   @extend .card-stat
247 |   color: $hull_color
248 | 
249 | .info-data.info-shields
250 |   @extend .card-stat
251 |   color: $shields_color
252 |   padding: 2px
253 | 
254 | .info-data.info-force
255 |   @extend .card-stat
256 |   color: $force_color
257 | 
258 | .info-data.info-charge
259 |   @extend .card-stat
260 |   color: $charge_color
261 | 
262 | r
263 |   color: $attack_color 
264 | 
265 | f
266 |   color: $force_color
267 | 
268 | .info-maneuvers table
269 |   table-layout: fixed
270 |   width: 100%
271 |   max-width: 300px
272 | 
273 | .info-maneuvers table > tbody > tr > td
274 |   border: 2px solid #d6c9d2
275 | 
276 | .info-maneuvers table > tbody > tr > td:first-child
277 |   @extend .card-stat
278 |   color: white
279 |   text-align: center
280 |   padding: 3px
281 |   background-color: #888888
282 |   background-image: linear-gradient(rgba(45, 45, 45, .2) 50%, transparent 50%, transparent)
283 |   background-size: 5px 5px
284 | 
285 | .info-maneuvers table > tbody > tr > td ~ td
286 |   background-color: #a29199
287 |   
288 | .info-name
289 |   font-family: BankGothicHD
290 |   font-size: 1.5em
291 | 
292 | .info-solitary
293 |   font-family: BankGothicHD
294 |   font-size: 1em
295 | 
296 | .info-type, .info-data.info-sources
297 |   font-family: BankGothicHD
298 |   font-size: 1.2em
299 | 
300 | .info-collection
301 |   font-family: BankGothicHD
302 |   font-style: italic
303 | 
304 | .info-container
305 |   padding-right: 0px
306 | 
307 | .info-well, .intro
308 |   color: black
309 |   margin-bottom: 15px
310 |   margin-right: 15px
311 |   padding: 8px
312 | 
313 | .info-well table > tbody > tr > td:first-child
314 |   font-weight: bold
315 |   padding-right: 5px
316 | 
317 | .info-text
318 |   margin-top: 15px
319 | 
320 | .squad-name-container
321 |   padding-top: 5px
322 |   font-size: 1.2em
323 | 
324 | .display-name
325 |   cursor: pointer
326 | 
327 | ul.squad-list
328 |   list-style-type: none
329 |   padding: 0
330 |   margin: 0
331 | 
332 | .points-display-container
333 |   font-size: 1.2em
334 |   text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black
335 |   padding-top: 5px
336 |   text-align: center
337 | 
338 | .points-display-container > .upgrade-points
339 |   font-size: 0.7em !important
340 | 
341 | .points-display-container > div
342 |   background: #202020ad
343 | 
344 | .points-display-container span
345 |   padding: 5px 0px
346 | 
347 | .modal
348 |   color: black
349 | 
350 | .icon
351 |   background-repeat: no-repeat
352 |   vertical-align: middle
353 | 
354 | div.tab-content
355 |   overflow: visible
356 | 
357 | .squad-list > li:hover
358 |   background-color: #ccc
359 | 
360 | upgrade-text
361 |   float: left
362 |   width: 90%
363 | 
364 | select.card-selector
365 |   width: 100%
366 | 
367 | .wingmate-label
368 |   float: right
369 | 
370 | .fancy-list .info-data
371 |   vertical-align: middle
372 |   -webkit-text-stroke: 0.5px black
373 | 
374 | .simple-list
375 |   font-family: Arial,Helvetica,sans-serif
376 |   font-size: 1.25em
377 | 
378 |   table
379 |     width: 100%
380 | 
381 |   .name
382 |     font-style: oblique
383 | 
384 |   .points
385 |     text-align: right
386 | 
387 |   .simple-pilot
388 |     .name
389 |       font-weight: bold
390 | 
391 |   .simple-addon
392 |     .name
393 |       padding-left: 20px
394 | 
395 |   .simple-ship-total
396 |     font-weight: bold
397 |     text-align: right
398 | 
399 | ul.nav
400 |   li.dropdown
401 |     ul.dropdown-menu
402 |       li
403 |         color: #333
404 |         padding: 1px 5px
405 |         cursor: pointer
406 |       li:hover
407 |         color: white
408 |         background-color: #333
409 | 
410 | input[type=number]
411 |   width: 2em
412 |   font-size: 1em
413 |   -moz-appearance: textfield
414 |     
415 | input[type=search].card-search-text, input[type=search].rule-search-text
416 |   width: 90%
417 |   min-width: 100px
418 |   max-width: 230px
419 | 
420 | .desired-points
421 |   background-color: #282f40
422 |   color: white
423 |   border: none
424 | 
425 | input::-webkit-outer-spin-button, input::-webkit-inner-spin-button
426 |   -webkit-appearance: none
427 |   margin: 0
428 |   background-color: #151515
429 | 
430 | .advanced-search-selection
431 |   width: 90%
432 |   min-width: 100px
433 |   max-width: 230px
434 | 
435 | .force
436 |   color: $force_color
437 | 
438 | .red
439 |   color: $attack_color
440 | 
441 | .squad-notes
442 |   height: 8em
443 |   width: 100%
444 |   font-family: EurostileStandard
445 | 
446 | .content-warning
447 |   color: white
448 |   font-size: 0.75em
449 | 
450 | .game-type-selector
451 |   width: 8em
452 | 
453 | .collection-content
454 |   .row:hover
455 |     background-color: lightgray
456 | 
457 | .collection-status
458 |   color: green
459 | 
460 | .xwing-card-browser .result-not-in-collection
461 |   color: #a00
462 | 
463 | .misc-settings-infoline
464 |   color: green
465 | 
466 | span.select2-chosen > i.xwing-miniatures-font
467 |   font-size: 1.1em
468 | 
469 | .upgrade-box > .select2-container .select2-choice
470 |   width: 100%
471 |   margin-right: -200px
472 | 
473 | .select2-results
474 |   max-height: 250px !important
475 | 
476 |   .select2-result-not-in-collection
477 |     color: #a00
478 | 
479 |   .select2-disabled
480 |     color: gray
481 |     background-color: lightgray
482 | 
483 | .card-restriction
484 |   font-style: italic
485 |   font-variant: small-caps
486 | 
487 | li.squad-summary
488 |   cursor: pointer
489 | 
490 | .nav-tabs a
491 |   color: black
492 | 
493 | .advanced-search-container
494 |   color: black
495 | .advanced-search-label
496 |   display: inline
497 |   margin: 0 10px 0 0
498 | .advanced-search-checkbox
499 |   margin: 0
500 | .show-advanced-search
501 |   margin-bottom: 10px
502 | 
503 | .search-container
504 |   margin: 3px
505 | 
506 | .card-search-container
507 |   color: black
508 |   padding: 3px
509 | 
510 | .squad-save-buttons
511 |   background: #282f40
512 |   margin-bottom: 10px
513 | 
514 | .squad-save-buttons-container
515 |     display: flex
516 |     flex-wrap: wrap
517 |     gap: 6px
518 | 
519 | .collection-inventory-content
520 |   ul
521 |     list-style-type: none
522 | 
523 | svg > g.maneuver.backwards
524 |   transform: translate(200px, 200px) rotate(180deg)
525 | 
526 | // New! For accessibility
527 | 
528 | $common-spacing: 10px
529 | 
530 | // Center the faction buttons in the top navbar
531 | #rebelTab, #empireTab, #scumTab, #resistanceTab, #firstorderTab, #republicTab, #separatistTab
532 |   padding-top: 5px
533 | 
534 | // Add consistent ($common-spacing) padding to standardize the alignment of buttons in the UI
535 | #xws
536 |   margin-top: $common-spacing
537 | 
538 | .xws-space
539 |   padding-left: 30px
540 | 
541 | // Make the top nav bar look distinct
542 | .main-top-nav-bar
543 |   background-color: #282f40
544 |   padding-bottom: 1px
545 |   padding-left: 4px
546 |   margin-bottom: $common-spacing
547 | 
548 | .tabbable > .nav 
549 |     display: table
550 |     width: 100%
551 | 
552 | .main-top-nav-bar > .nav-item 
553 |   float: left
554 | 
555 | #rebel-builder > .container-fluid > .squad-save-buttons, #rebel-builder > .container-fluid > .row > .ship-container > .obstacles-container
556 |   background-color: #d7373755
557 | 
558 | #empire-builder > .container-fluid > .squad-save-buttons, #empire-builder > .container-fluid > .row > .ship-container > .obstacles-container
559 |   background-color: #2f4e9f55
560 | 
561 | #scum-builder > .container-fluid > .squad-save-buttons, #scum-builder > .container-fluid > .row > .ship-container > .obstacles-container
562 |   background-color: #b79e3355
563 | 
564 | #resistance-builder > .container-fluid > .squad-save-buttons, #resistance-builder > .container-fluid > .row > .ship-container > .obstacles-container
565 |   background-color: #FFA50055
566 | 
567 | #firstorder-builder > .container-fluid > .squad-save-buttons, #firstorder-builder > .container-fluid > .row > .ship-container > .obstacles-container
568 |   background-color: #87242455
569 | 
570 | #republic-builder > .container-fluid > .squad-save-buttons, #republic-builder > .container-fluid > .row > .ship-container > .obstacles-container
571 |   background-color: #a1774755
572 | 
573 | #separatist-builder > .container-fluid > .squad-save-buttons, #separatist-builder > .container-fluid > .row > .ship-container > .obstacles-container
574 |   background-color: #363ca355
575 | 
576 | #rebelTab.active
577 |   background-color: #d73737
578 | 
579 | #empireTab.active
580 |   background-color: #2f4e9f
581 | 
582 | #scumTab.active
583 |   background-color: #b79e33
584 | 
585 | #resistanceTab.active
586 |   background-color: #FFA500
587 | 
588 | #firstorderTab.active
589 |   background-color: #872424
590 | 
591 | #republicTab.active
592 |   background-color: #a17747
593 | 
594 | #separatistTab.active
595 |   background-color: #363ca3
596 | 
597 | .builder-title
598 |   margin-left: 0px
599 |   margin-right: 0px
600 | 
601 | .nav-pills .nav-link.active
602 |   background-color: #337ab7
603 | 
604 | .nav-item > .nav-link
605 |   padding-left: 0.75em
606 |   padding-right: 0.75em
607 |   padding-bottom: 0.0em
608 |   color: #337ab7
609 | 
610 | .nav-item > .nav-link:hover
611 |   color: #FFF
612 |   background-color: #337ab7
613 | 
614 | a.dropdown-item:Hover
615 |   color: #FFF
616 |   background-color: #337ab7
617 | 
618 | // Move the conditions container, again, to use consistent padding
619 | .conditions-container
620 |   padding-left: $common-spacing
621 | 
622 | .upgrade-text
623 |     float: left
624 |     width: 80%
625 |     margin: 5px
626 | 
627 | // Add some padding in between ship rows
628 | .row .ship
629 |   padding-top: $common-spacing * 0.5
630 |   padding-bottom: $common-spacing * 0.5
631 | 
632 | h6
633 |     padding-top: 10px
634 |     
635 | .squad-tag
636 |     margin-top: 15px
637 |     margin-bottom: 15px
638 | 
639 |     
640 | // Style the squad points and name row to make it look distinct
641 | .squad-name-and-points-row
642 |   background-color: #282f40
643 |   margin-bottom: $common-spacing
644 | 
645 | .squad-buttons
646 |     text-align: right
647 | 
648 | // Scrollbar
649 | ::-webkit-scrollbar
650 |   width: 5px
651 | ::-webkit-scrollbar-track
652 |   background: inherit
653 | ::-webkit-scrollbar-thumb
654 |   background: #888
655 | ::-webkit-scrollbar-thumb:hover
656 |   background: #555
657 | 
658 | .form-group
659 |     margin-bottom: 1px
660 | 
661 | .ship-query-modal, .pilot-query-modal, .upgrade-query-modal
662 |     padding: 0px 12px
663 |     height: 26px
664 |     margin-left: 2px
665 | 
666 | .addon-container
667 |   display: flex
668 |   flex-wrap: wrap
669 | .upgrade-box
670 |   width: 50%
671 |   padding-right:  4px
672 |   padding-left:  4px
673 | 
674 | .upgrade-box:nth-child(even)
675 |   padding-right: 0
676 | 
677 | .upgrade-box:nth-child(odd)
678 |   padding-left: 0
679 | 
680 | 
681 | .action-bar
682 |   margin-top: 6px
683 |   margin-left: 6px
684 | 
685 | .action-separator
686 |   display: inline
687 |   color: #888888
688 |   margin-left: 2px
689 |   margin-right: 2px
690 |   vertical-align: middle
691 | 
--------------------------------------------------------------------------------