├── .bootstraprc
├── .gitignore
├── .modernizrrc
├── .nvmrc
├── .ruby-version
├── Gemfile
├── Gemfile.lock
├── Gruntfile.js
├── LICENSE
├── README.md
├── config.rb
├── config
└── webpack
│ ├── development.js
│ ├── production.js
│ └── shared.js
├── data
└── social_icons.yml
├── lib
└── helpers.rb
├── package.json
├── source
├── 404.html.erb
├── images
│ ├── avatar.png
│ ├── icon-caret-down.svg
│ ├── icon-required.svg
│ ├── icon-search.svg
│ ├── icon-success.svg
│ ├── icon-tooltip.svg
│ └── icon-warning.svg
├── index.html.erb
├── javascripts
│ ├── body.js
│ ├── body
│ │ ├── $_get.js
│ │ ├── jquery.custom-file-input.js
│ │ ├── maxlength.js
│ │ ├── modals.js
│ │ ├── open-menu.js
│ │ ├── popover.js
│ │ ├── scrollTo.js
│ │ ├── select2.js
│ │ └── tippy.js
│ └── head.js
├── layouts
│ ├── basic.erb
│ ├── layout.erb
│ └── primary.erb
├── maintenance.html.erb
├── partials
│ ├── _alert.html.erb
│ ├── _footer.html.erb
│ ├── _header.html.erb
│ ├── _nav-responsive.html.erb
│ └── _shapes.html.erb
├── reset-password.html.erb
├── shapes
│ ├── 404.svg
│ ├── icon-caret-down.svg
│ ├── maintenance.svg
│ ├── marsman-template-negative.svg
│ └── marsman-template.svg
├── sign-in.html.erb
├── sign-up.html.erb
├── stylesheets
│ ├── application.scss
│ ├── base
│ │ ├── _buttons.scss
│ │ ├── _fonts.scss
│ │ ├── _forms.scss
│ │ ├── _forms__checkbox.scss
│ │ ├── _forms__input-file.scss
│ │ ├── _forms__radio.scss
│ │ ├── _general.scss
│ │ ├── _grid.scss
│ │ ├── _icons.scss
│ │ └── _tables.scss
│ ├── blocks
│ │ ├── _actions.scss
│ │ ├── _alert.scss
│ │ ├── _badge.scss
│ │ ├── _box.scss
│ │ ├── _card-css.scss
│ │ ├── _dropdown.scss
│ │ ├── _footer.scss
│ │ ├── _header.scss
│ │ ├── _hero.scss
│ │ ├── _main-content.scss
│ │ ├── _modals.scss
│ │ ├── _nav-inline.scss
│ │ ├── _nav-pills.scss
│ │ ├── _nav-responsive.scss
│ │ ├── _pagination.scss
│ │ ├── _pills.scss
│ │ ├── _popover.scss
│ │ ├── _progress-bar.scss
│ │ ├── _select2.scss
│ │ ├── _separator.scss
│ │ ├── _tooltip.scss
│ │ └── _user-info.scss
│ ├── layouts
│ │ ├── _home.scss
│ │ ├── _primary.scss
│ │ └── _toolkit.scss
│ ├── plugins
│ │ └── _tippy.scss
│ ├── postcss.config.js
│ └── utilities
│ │ ├── _helpers.scss
│ │ ├── _keyframes.scss
│ │ ├── _mixins.scss
│ │ ├── _normalize.scss
│ │ └── _variables.scss
├── terms-and-conditions.html.erb
├── toolkit.html.erb
└── whole-page-text.html.erb
└── yarn.lock
/.bootstraprc:
--------------------------------------------------------------------------------
1 | {
2 | "bootstrapVersion": 3,
3 | "styles": false,
4 | "scripts": true
5 | }
6 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Ignore bundler config
2 | /.bundle
3 | /vendor/bundle
4 |
5 | # Ignore the build directory
6 | /build
7 |
8 | # Ignore cache
9 | /.sass-cache
10 | /.cache
11 |
12 | # Ignore .DS_store file
13 | .DS_Store
14 |
15 | # Ignore SublimeText
16 | *.sublime-workspace
17 | *.sublime-project
18 |
19 | # Ignore node & grunt related files
20 | /node_modules
21 |
22 | # Ignore Project Files
23 | /project_files
24 |
25 | # Webpack output directory
26 | dist
27 |
--------------------------------------------------------------------------------
/.modernizrrc:
--------------------------------------------------------------------------------
1 | {
2 | "classPrefix": "",
3 | "options": [
4 | "addTest",
5 | "atRule",
6 | "domPrefixes",
7 | "hasEvent",
8 | "html5shiv",
9 | "html5printshiv",
10 | "testAllProps",
11 | "testProp",
12 | "testStyles"
13 | ],
14 | "feature-detects": [
15 | "a/download",
16 | "ambientlight",
17 | "applicationcache",
18 | "audio",
19 | "audio/loop",
20 | "audio/preload",
21 | "audio/webaudio",
22 | "battery",
23 | "battery/lowbattery",
24 | "blob",
25 | "canvas",
26 | "canvas/blending",
27 | "canvas/todataurl",
28 | "canvas/winding",
29 | "canvastext",
30 | "contenteditable",
31 | "contextmenu",
32 | "cookies",
33 | "cors",
34 | "custom-elements",
35 | "crypto",
36 | "crypto/getrandomvalues",
37 | "css/all",
38 | "css/animations",
39 | "css/appearance",
40 | "css/backdropfilter",
41 | "css/backgroundblendmode",
42 | "css/backgroundcliptext",
43 | "css/backgroundposition-shorthand",
44 | "css/backgroundposition-xy",
45 | "css/backgroundrepeat",
46 | "css/backgroundsize",
47 | "css/backgroundsizecover",
48 | "css/borderimage",
49 | "css/borderradius",
50 | "css/boxshadow",
51 | "css/boxsizing",
52 | "css/calc",
53 | "css/checked",
54 | "css/chunit",
55 | "css/columns",
56 | "css/cssgrid",
57 | "css/cubicbezierrange",
58 | "css/displayrunin",
59 | "css/displaytable",
60 | "css/ellipsis",
61 | "css/escape",
62 | "css/exunit",
63 | "css/filters",
64 | "css/flexbox",
65 | "css/flexboxlegacy",
66 | "css/flexboxtweener",
67 | "css/flexwrap",
68 | "css/fontface",
69 | "css/generatedcontent",
70 | "css/gradients",
71 | "css/hairline",
72 | "css/hsla",
73 | "css/hyphens",
74 | "css/invalid",
75 | "css/lastchild",
76 | "css/mask",
77 | "css/mediaqueries",
78 | "css/multiplebgs",
79 | "css/nthchild",
80 | "css/objectfit",
81 | "css/opacity",
82 | "css/overflow-scrolling",
83 | "css/pointerevents",
84 | "css/positionsticky",
85 | "css/pseudoanimations",
86 | "css/pseudotransitions",
87 | "css/reflections",
88 | "css/regions",
89 | "css/remunit",
90 | "css/resize",
91 | "css/rgba",
92 | "css/scrollbars",
93 | "css/scrollsnappoints",
94 | "css/shapes",
95 | "css/siblinggeneral",
96 | "css/subpixelfont",
97 | "css/supports",
98 | "css/target",
99 | "css/textalignlast",
100 | "css/textshadow",
101 | "css/transforms",
102 | "css/transformslevel2",
103 | "css/transforms3d",
104 | "css/transformstylepreserve3d",
105 | "css/transitions",
106 | "css/userselect",
107 | "css/valid",
108 | "css/vhunit",
109 | "css/vmaxunit",
110 | "css/vminunit",
111 | "css/vwunit",
112 | "css/will-change",
113 | "css/wrapflow",
114 | "custom-protocol-handler",
115 | "customevent",
116 | "dart",
117 | "dataview-api",
118 | "dom/classlist",
119 | "dom/createElement-attrs",
120 | "dom/dataset",
121 | "dom/documentfragment",
122 | "dom/hidden",
123 | "dom/microdata",
124 | "dom/mutationObserver",
125 | "dom/passiveeventlisteners",
126 | "elem/bdi",
127 | "elem/datalist",
128 | "elem/details",
129 | "elem/output",
130 | "elem/picture",
131 | "elem/progress-meter",
132 | "elem/ruby",
133 | "elem/template",
134 | "elem/time",
135 | "elem/track",
136 | "elem/unknown",
137 | "emoji",
138 | "es5/array",
139 | "es5/date",
140 | "es5/function",
141 | "es5/object",
142 | "es5/specification",
143 | "es5/strictmode",
144 | "es5/string",
145 | "es5/syntax",
146 | "es5/undefined",
147 | "es6/array",
148 | "es6/collections",
149 | "es6/contains",
150 | "es6/generators",
151 | "es6/math",
152 | "es6/number",
153 | "es6/object",
154 | "es6/promises",
155 | "es6/string",
156 | "event/deviceorientation-motion",
157 | "event/oninput",
158 | "eventlistener",
159 | "exif-orientation",
160 | "file/api",
161 | "file/filesystem",
162 | "flash",
163 | "forms/capture",
164 | "forms/fileinput",
165 | "forms/fileinputdirectory",
166 | "forms/formattribute",
167 | "forms/inputnumber-l10n",
168 | "forms/placeholder",
169 | "forms/requestautocomplete",
170 | "forms/validation",
171 | "fullscreen-api",
172 | "gamepad",
173 | "geolocation",
174 | "hashchange",
175 | "hiddenscroll",
176 | "history",
177 | "htmlimports",
178 | "ie8compat",
179 | "iframe/sandbox",
180 | "iframe/seamless",
181 | "iframe/srcdoc",
182 | "img/apng",
183 | "img/crossorigin",
184 | "img/jpeg2000",
185 | "img/jpegxr",
186 | "img/sizes",
187 | "img/srcset",
188 | "img/webp",
189 | "img/webp-alpha",
190 | "img/webp-animation",
191 | "img/webp-lossless",
192 | "indexeddb",
193 | "indexeddbblob",
194 | "input",
195 | "input/formaction",
196 | "input/formenctype",
197 | "input/formmethod",
198 | "input/formtarget",
199 | "inputsearchevent",
200 | "inputtypes",
201 | "intl",
202 | "json",
203 | "ligatures",
204 | "lists-reversed",
205 | "mathml",
206 | "mediaquery/hovermq",
207 | "mediaquery/pointermq",
208 | "messagechannel",
209 | "network/beacon",
210 | "network/connection",
211 | "network/eventsource",
212 | "network/fetch",
213 | "network/xhr-responsetype",
214 | "network/xhr-responsetype-arraybuffer",
215 | "network/xhr-responsetype-blob",
216 | "network/xhr-responsetype-document",
217 | "network/xhr-responsetype-json",
218 | "network/xhr-responsetype-text",
219 | "network/xhr2",
220 | "notification",
221 | "pagevisibility-api",
222 | "performance",
223 | "pointerevents",
224 | "pointerlock-api",
225 | "postmessage",
226 | "proximity",
227 | "queryselector",
228 | "quota-management-api",
229 | "requestanimationframe",
230 | "script/async",
231 | "script/defer",
232 | "serviceworker",
233 | "speech/speech-recognition",
234 | "speech/speech-synthesis",
235 | "storage/localstorage",
236 | "storage/sessionstorage",
237 | "storage/websqldatabase",
238 | "style/scoped",
239 | "svg",
240 | "svg/asimg",
241 | "svg/clippaths",
242 | "svg/filters",
243 | "svg/foreignobject",
244 | "svg/inline",
245 | "svg/smil",
246 | "templatestrings",
247 | "textarea/maxlength",
248 | "touchevents",
249 | "typed-arrays",
250 | "unicode",
251 | "unicode-range",
252 | "url/bloburls",
253 | "url/data-uri",
254 | "url/parser",
255 | "url/urlsearchparams",
256 | "userdata",
257 | "vibration",
258 | "video",
259 | "video/autoplay",
260 | "video/crossorigin",
261 | "video/loop",
262 | "video/preload",
263 | "vml",
264 | "web-intents",
265 | "webanimations",
266 | "webgl",
267 | "webgl/extensions",
268 | "webrtc/datachannel",
269 | "webrtc/getusermedia",
270 | "webrtc/peerconnection",
271 | "websockets",
272 | "websockets/binary",
273 | "window/framed",
274 | "workers/blobworkers",
275 | "workers/dataworkers",
276 | "workers/sharedworkers",
277 | "workers/transferables",
278 | "workers/webworkers",
279 | "xdomainrequest"
280 | ]
281 | }
282 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | lts/carbon
2 |
--------------------------------------------------------------------------------
/.ruby-version:
--------------------------------------------------------------------------------
1 | 2.3.1
2 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 |
3 | gem 'faker', '~> 1.7.3'
4 |
5 | #middleman gems
6 | gem 'middleman', '>= 4.0.0'
7 | gem 'middleman-livereload'
8 | gem 'middleman-pry'
9 | # gem 'middleman-email', git: "git@github.com:MarsBased/middleman-email.git"
10 |
11 | gem 'middleman-webpacker'
12 |
--------------------------------------------------------------------------------
/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GEM
2 | remote: https://rubygems.org/
3 | specs:
4 | activesupport (5.0.1)
5 | concurrent-ruby (~> 1.0, >= 1.0.2)
6 | i18n (~> 0.7)
7 | minitest (~> 5.1)
8 | tzinfo (~> 1.1)
9 | addressable (2.5.0)
10 | public_suffix (~> 2.0, >= 2.0.2)
11 | backports (3.6.8)
12 | coderay (1.1.1)
13 | coffee-script (2.4.1)
14 | coffee-script-source
15 | execjs
16 | coffee-script-source (1.12.2)
17 | compass-import-once (1.0.5)
18 | sass (>= 3.2, < 3.5)
19 | concurrent-ruby (1.0.4)
20 | contracts (0.13.0)
21 | dotenv (2.2.0)
22 | em-websocket (0.5.1)
23 | eventmachine (>= 0.12.9)
24 | http_parser.rb (~> 0.6.0)
25 | erubis (2.7.0)
26 | eventmachine (1.2.3)
27 | execjs (2.7.0)
28 | faker (1.7.3)
29 | i18n (~> 0.5)
30 | fast_blank (1.0.0)
31 | fastimage (2.1.0)
32 | ffi (1.9.17)
33 | haml (4.0.7)
34 | tilt
35 | hamster (3.0.0)
36 | concurrent-ruby (~> 1.0)
37 | hashie (3.5.4)
38 | http_parser.rb (0.6.0)
39 | i18n (0.7.0)
40 | kramdown (1.13.2)
41 | listen (3.0.8)
42 | rb-fsevent (~> 0.9, >= 0.9.4)
43 | rb-inotify (~> 0.9, >= 0.9.7)
44 | memoist (0.15.0)
45 | method_source (0.8.2)
46 | middleman (4.2.1)
47 | coffee-script (~> 2.2)
48 | compass-import-once (= 1.0.5)
49 | haml (>= 4.0.5)
50 | kramdown (~> 1.2)
51 | middleman-cli (= 4.2.1)
52 | middleman-core (= 4.2.1)
53 | sass (>= 3.4.0, < 4.0)
54 | middleman-cli (4.2.1)
55 | thor (>= 0.17.0, < 2.0)
56 | middleman-core (4.2.1)
57 | activesupport (>= 4.2, < 5.1)
58 | addressable (~> 2.3)
59 | backports (~> 3.6)
60 | bundler (~> 1.1)
61 | contracts (~> 0.13.0)
62 | dotenv
63 | erubis
64 | execjs (~> 2.0)
65 | fast_blank
66 | fastimage (~> 2.0)
67 | hamster (~> 3.0)
68 | hashie (~> 3.4)
69 | i18n (~> 0.7.0)
70 | listen (~> 3.0.0)
71 | memoist (~> 0.14)
72 | padrino-helpers (~> 0.13.0)
73 | parallel
74 | rack (>= 1.4.5, < 3)
75 | sass (>= 3.4)
76 | servolux
77 | tilt (~> 2.0)
78 | uglifier (~> 3.0)
79 | middleman-livereload (3.4.6)
80 | em-websocket (~> 0.5.1)
81 | middleman-core (>= 3.3)
82 | rack-livereload (~> 0.3.15)
83 | middleman-pry (1.0.1)
84 | middleman (>= 3.3, < 5)
85 | pry (~> 0.9)
86 | middleman-webpacker (1.0.0)
87 | middleman-core (>= 4.2.1)
88 | minitest (5.10.1)
89 | padrino-helpers (0.13.3.3)
90 | i18n (~> 0.6, >= 0.6.7)
91 | padrino-support (= 0.13.3.3)
92 | tilt (>= 1.4.1, < 3)
93 | padrino-support (0.13.3.3)
94 | activesupport (>= 3.1)
95 | parallel (1.10.0)
96 | pry (0.10.4)
97 | coderay (~> 1.1.0)
98 | method_source (~> 0.8.1)
99 | slop (~> 3.4)
100 | public_suffix (2.0.5)
101 | rack (2.0.1)
102 | rack-livereload (0.3.16)
103 | rack
104 | rb-fsevent (0.9.8)
105 | rb-inotify (0.9.8)
106 | ffi (>= 0.5.0)
107 | sass (3.4.23)
108 | servolux (0.12.0)
109 | slop (3.6.0)
110 | thor (0.19.4)
111 | thread_safe (0.3.6)
112 | tilt (2.0.6)
113 | tzinfo (1.2.2)
114 | thread_safe (~> 0.1)
115 | uglifier (3.0.4)
116 | execjs (>= 0.3.0, < 3)
117 |
118 | PLATFORMS
119 | ruby
120 |
121 | DEPENDENCIES
122 | faker (~> 1.7.3)
123 | middleman (>= 4.0.0)
124 | middleman-livereload
125 | middleman-pry
126 | middleman-webpacker
127 |
128 | BUNDLED WITH
129 | 1.15.2
130 |
--------------------------------------------------------------------------------
/Gruntfile.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | module.exports = function (grunt) {
4 | require('load-grunt-tasks')(grunt);
5 |
6 | grunt.initConfig({
7 | cfg: {
8 | shapesPath: 'source/shapes',
9 | partialsPath: 'source/partials'
10 | },
11 |
12 | //SVG min
13 | svgmin: {
14 | options: {
15 | plugins: [
16 | {
17 | removeEmptyAttrs: false
18 | }, {
19 | removeViewBox: false
20 | }, {
21 | //removeUselessStrokeAndFill: true
22 | }, {
23 | removeAttrs: {
24 | attrs: ['xmlns','fill=none']
25 | }
26 | }
27 | ]
28 | },
29 | multiple: {
30 | files: [{
31 | expand: true,
32 | cwd: '<%= cfg.shapesPath %>/',
33 | src: ['**/*.svg'],
34 | dest: '<%= cfg.shapesPath %>/'
35 | }]
36 | }
37 | },
38 |
39 | // SVG Sprite generator
40 | svgstore: {
41 | dev: {
42 | options: {
43 | prefix : 'shape-',
44 | cleanup: false,
45 | svg: {
46 | viewBox : '0 0 100 100',
47 | xmlns: 'http://www.w3.org/2000/svg',
48 | style: 'display:none'
49 | }
50 | },
51 | src: '<%= cfg.shapesPath %>/*.svg',
52 | dest: '<%= cfg.partialsPath %>/_shapes.html.erb'
53 | },
54 | },
55 | });
56 |
57 | grunt.registerTask('svg', ['svgmin','svgstore:dev']);
58 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 MarsBased
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MarsMan
2 |
3 |
4 |
5 | Frontend framework for starting new projects.
6 |
7 | Take a look at https://marsman.marsbased.com
8 |
9 | Developed with Middleman (https://middlemanapp.com/). Uses Grunt to automatize SVG inline generation.
10 |
11 | ## MarsMan Installation
12 |
13 | To use MarsMan as a template, init the project with the following command:
14 |
15 | ```
16 | middleman init new_project -T marsbased/marsman
17 | ```
18 |
19 | ## Webpack
20 |
21 | MarsMan uses Webpack to compile and handle Javascript, Styles and all static assets through the [middleman-webpack](https://github.com/MarsBased/middleman-webpack) extension, which provides a set of helpers that can be used in the HTML to include these assets.
22 |
23 | Webpack configuration is placed in the `config` folder with the following structure:
24 | * `shared.js` has the configuration options shared by all environments.
25 | * `development.js` has development-specific settings.
26 | * `production.js` has build specific settings.
27 |
28 | Webpack is configured to be able to use ES6 in Javascript files.
29 |
30 | ## Modernizr
31 |
32 | By default a full Modernizr build is included. The activated features and detections can be customized in `.modernizrrc`
33 |
34 | =======
35 |
36 | # Project README
37 |
38 | ## Development
39 |
40 | ```
41 | yarn install
42 | bundle install
43 | bundle exec middleman server
44 | ```
45 |
46 | or
47 |
48 | ```
49 | yarn install
50 | yarn start
51 | ```
52 |
53 | To update the SVG shapes, place the needed SVG files inside source/shapes and
54 | call:
55 |
56 | ```
57 | grunt svg
58 | ```
59 |
60 | ## Common Errors
61 |
62 | **Q: Webpack compilation fails with an error similar to `Error: ENOENT: no such file or directory, scandir '/Users/cooluser/Documents/middleman-webpack-sample/node_modules/node-sass/vendor'`**
63 |
64 | A: run `npm rebuild node-sass`
65 |
--------------------------------------------------------------------------------
/config.rb:
--------------------------------------------------------------------------------
1 | require 'lib/helpers'
2 | helpers Helpers
3 |
4 | set :relative_links, true
5 |
6 | activate :pry
7 | activate :directory_indexes
8 | activate :webpack
9 |
10 | configure :development do
11 | activate :livereload, no_swf: true
12 | end
13 |
14 | ready do
15 | @pages = sitemap.resources.find_all{|p| p.source_file.match(/\.html/) }
16 | @pages.each do |r|
17 | @versions = []
18 | if @data = r.data['versions']
19 | @data.split(/[\s,']/).reject(&:empty?).each do |d|
20 | @versions.push(d)
21 | end
22 | end
23 | @versions.each do |version|
24 | @path = r.destination_path.gsub 'index.html', "_#{version}.html"
25 | proxy @path, r.path, :locals => { :versions => version }
26 | end
27 | end
28 | end
29 |
30 | configure :build do
31 | ignore 'shapes/*'
32 | set :environment, 'production'
33 | #set :http_prefix, '/marsman'
34 | end
35 |
--------------------------------------------------------------------------------
/config/webpack/development.js:
--------------------------------------------------------------------------------
1 | const merge = require('webpack-merge');
2 | const sharedConfig = require('./shared.js');
3 |
4 | module.exports = merge(sharedConfig, {
5 | devtool: 'sourcemap',
6 | stats: {
7 | errorDetails: true
8 | },
9 | output: {
10 | pathinfo: true
11 | },
12 | node: {
13 | console: true
14 | }
15 | });
16 |
--------------------------------------------------------------------------------
/config/webpack/production.js:
--------------------------------------------------------------------------------
1 | const webpack = require('webpack');
2 | const merge = require('webpack-merge');
3 | const CompressionPlugin = require('compression-webpack-plugin');
4 |
5 | const sharedConfig = require('./shared.js');
6 |
7 | module.exports = merge(sharedConfig, {
8 | output: {
9 | filename: '[name]-[chunkhash].js'
10 | },
11 |
12 | plugins: [
13 | new webpack.optimize.UglifyJsPlugin(),
14 | new CompressionPlugin({
15 | asset: '[path].gz[query]',
16 | algorithm: 'gzip',
17 | test: /\.(js|css|svg|eot|ttf|woff|woff2)$/
18 | })
19 | ]
20 | });
21 |
--------------------------------------------------------------------------------
/config/webpack/shared.js:
--------------------------------------------------------------------------------
1 | const webpack = require('webpack');
2 | const ExtractTextPlugin = require('extract-text-webpack-plugin');
3 | const ManifestPlugin = require('webpack-manifest-plugin');
4 | const Clean = require('clean-webpack-plugin');
5 | const { resolve } = require('path');
6 | const { sync } = require('glob');
7 |
8 | const isProduction = process.env.NODE_ENV === 'production';
9 | const publicPath = 'dist';
10 |
11 | module.exports = {
12 | entry: {
13 | body: './source/javascripts/body.js',
14 | head: './source/javascripts/head.js',
15 | application: './source/stylesheets/application.scss',
16 | images: sync('./source/images/**/*', { nodir: true }),
17 | vendor: ['lodash', 'jquery', 'bootstrap-loader', 'select2']
18 | },
19 |
20 | output: {
21 | path: resolve(publicPath),
22 | filename: '[name].bundle.js'
23 | },
24 |
25 | module: {
26 | rules: [
27 | {
28 | test: /\.js$/,
29 | exclude: /(node_modules|bower_components)/,
30 | use: {
31 | loader: 'babel-loader',
32 | options: {
33 | presets: [['env']]
34 | }
35 | }
36 | },
37 | {
38 | test: /\.(scss|sass|css)$/i,
39 | use: 'import-glob-loader',
40 | enforce: 'pre'
41 | },
42 | {
43 | test: /\.(scss|sass|css)$/i,
44 | use: ExtractTextPlugin.extract({
45 | fallback: 'style-loader',
46 | use: [
47 | {
48 | loader: 'css-loader',
49 | options: {
50 | minimize: isProduction
51 | }
52 | },
53 | {
54 | loader: 'postcss-loader',
55 | options: {
56 | sourceMap: true
57 | }
58 | },
59 | {
60 | loader: 'sass-loader',
61 | options: {
62 | sourceMap: true,
63 | includePaths: [resolve('node_modules')]
64 | }
65 | }
66 | ]
67 | })
68 | },
69 | {
70 | test: /fonts\/.*\.(svg|eot|ttf|woff|woff2)(\?v=\d+\.\d+\.\d+)?$/i,
71 | use: [
72 | {
73 | loader: 'file-loader',
74 | options: {
75 | publicPath: '',
76 | // can't use 'fonts' because it conflicts with Middleman
77 | name: isProduction ? 'fnt/[name]-[hash].[ext]' : 'fnt/[name].[ext]'
78 | }
79 | }
80 | ]
81 | },
82 | {
83 | test: /images\/.*\.(jpg|jpeg|png|gif|svg)$/i,
84 | use: [
85 | {
86 | loader: 'file-loader',
87 | options: {
88 | publicPath: '',
89 | outputPath: 'img/',
90 | context: 'source/images/',
91 | // can't use 'images' because it conflicts with Middleman
92 | name: isProduction ? '[path][name]-[hash].[ext]' : '[path][name].[ext]'
93 | }
94 | }
95 | ]
96 | },
97 | {
98 | test: require.resolve('jquery'),
99 | use: ['expose-loader?$', 'expose-loader?jQuery']
100 | },
101 | {
102 | test: /bootstrap-sass[\/\\]assets[\/\\]javascripts[\/\\]/,
103 | loader: 'imports-loader?jQuery=jquery'
104 | },
105 | {
106 | test: /\.modernizrrc(\.json)?$/,
107 | use: ['modernizr-loader', 'json-loader']
108 | }
109 | ]
110 | },
111 |
112 | resolve: {
113 | extensions: ['.js', '.ts', '.sass', '.scss', '.css', '.png', '.svg', '.gif', '.jpeg'],
114 | modules: [resolve('source/javascripts'), 'node_modules'],
115 | alias: {
116 | assets: resolve('source/'),
117 | modernizr$: resolve('.modernizrrc')
118 | }
119 | },
120 |
121 | resolveLoader: {
122 | modules: ['node_modules']
123 | },
124 |
125 | plugins: [
126 | new webpack.EnvironmentPlugin(JSON.parse(JSON.stringify(process.env))),
127 | new Clean([publicPath], {
128 | root: resolve()
129 | }),
130 | new ExtractTextPlugin(
131 | isProduction ? '[name].bundle-[hash].css' : '[name].bundle.css'
132 | ),
133 | new webpack.ProvidePlugin({
134 | $: 'jquery',
135 | jQuery: 'jquery',
136 | 'window.jQuery': 'jquery'
137 | }),
138 | new webpack.optimize.CommonsChunkPlugin({
139 | names: ['vendor', 'manifest']
140 | }),
141 | new ManifestPlugin({
142 | publicPath: '/',
143 | writeToFileEmit: true
144 | })
145 | ]
146 | };
147 |
--------------------------------------------------------------------------------
/data/social_icons.yml:
--------------------------------------------------------------------------------
1 | - name: envelope
2 | url: mailto:hola@marsbased.com
3 | - name: twitter
4 | url: https://twitter.com/MarsBased
5 | - name: facebook
6 | url: http://facebook.com/marsbased
7 | - name: linkedin
8 | url: http://www.linkedin.com/company/marsbased
9 | - name: instagram
10 | url: http://www.instagram.com/marsbased
11 | - name: google-plus
12 | url: http://plus.google.com/+Marsbased/
13 | - name: github
14 | url: https://github.com/MarsBased
--------------------------------------------------------------------------------
/lib/helpers.rb:
--------------------------------------------------------------------------------
1 | module Helpers
2 |
3 | def active(name, class_name = 'active', reverse = false)
4 | if(class_active = current_page.data.active)
5 | class_active.split(/[\s,']/)
6 | if(reverse)
7 | class_name if(!class_active.include?(name))
8 | else
9 | class_name if(class_active.include?(name))
10 | end
11 | end
12 | end
13 |
14 | def version(name, return_value = true, else_value = false )
15 | names = Array(name)
16 | @c = current_page
17 | @versions = "#{@c.data.version} #{@c.metadata[:locals][:versions]}"
18 | if(names.any? { |n| @versions.split(/[\s,']/).include?(n) })
19 | return_value
20 | else
21 | else_value if(else_value)
22 | end
23 | end
24 |
25 | def full_url(path)
26 | "#{config[:host]}#{path}"
27 | end
28 |
29 | def svg(name)
30 | content_tag(:svg, class: "shape #{name}") do
31 | content_tag(:use, nil, :'xlink:href' => "#shape-#{name}")
32 | end
33 | end
34 |
35 | end
36 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "marsman-template",
3 | "version": "0.1.0",
4 | "scripts": {
5 | "start": "bundle exec middleman server",
6 | "postinstall": "bundle install"
7 | },
8 | "devDependencies": {
9 | "clean-webpack-plugin": "^0.1.16",
10 | "css-loader": "^0.26.1",
11 | "expose-loader": "^0.7.1",
12 | "extract-text-webpack-plugin": "^2.0.0-beta",
13 | "grunt": "^1.0.0",
14 | "grunt-svgmin": "^3.0.0",
15 | "grunt-svgstore": "^1.0.0",
16 | "load-grunt-tasks": "^3.5.2",
17 | "node-sass": "^4.5.0",
18 | "sass-loader": "^4.1.1",
19 | "style-loader": "^0.13.1",
20 | "webpack": "^2.3.3"
21 | },
22 | "dependencies": {
23 | "autoprefixer": "^6.7.7",
24 | "babel-core": "^6.24.0",
25 | "babel-loader": "^6.4.1",
26 | "babel-preset-env": "^1.3.2",
27 | "bootstrap-loader": "^2.1.0",
28 | "bootstrap-sass": "3.3.7",
29 | "compression-webpack-plugin": "^0.3.2",
30 | "file-loader": "^0.11.1",
31 | "font-awesome": "^4.7.0",
32 | "glob": "^7.1.1",
33 | "import-glob-loader": "^1.1.0",
34 | "imports-loader": "^0.7.1",
35 | "jquery": "^3.1.1",
36 | "json-loader": "^0.5.7",
37 | "lodash": "^4.17.4",
38 | "modernizr": "^3.5.0",
39 | "modernizr-loader": "^1.0.1",
40 | "postcss-loader": "^2.0.9",
41 | "postcss-smart-import": "^0.6.10",
42 | "precss": "^1.4.0",
43 | "resolve-url-loader": "^2.1.0",
44 | "select2": "^4.0.3",
45 | "tippy.js": "^3.0.3",
46 | "webpack-manifest-plugin": "^1.1.0",
47 | "webpack-merge": "^4.1.0"
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/source/404.html.erb:
--------------------------------------------------------------------------------
1 | ---
2 | title: 404
3 | layout: primary
4 | body: 404 error
5 | ---
6 |
7 |
8 |
9 |
10 | <%= svg('404') %>
11 |
12 |
Opps! This page couldn’t be found…
13 |
14 | <%= link_to 'Take me back home','/index.html', class:'btn-secondary' %>
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/source/images/avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsBased/marsman/179f466845af93ba45854995ad52700616ed3e97/source/images/avatar.png
--------------------------------------------------------------------------------
/source/images/icon-caret-down.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | icon-caret-down
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/source/images/icon-required.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | icon-required
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/source/images/icon-search.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | icon-search
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/source/images/icon-success.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | icon-success
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/source/images/icon-tooltip.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
8 | tooltip-icon
9 |
12 |
13 |
15 |
16 |
--------------------------------------------------------------------------------
/source/images/icon-warning.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | icon-warning
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/source/index.html.erb:
--------------------------------------------------------------------------------
1 | ---
2 | title: Welcome to marsman Template
3 | body: home
4 | ---
5 |
6 |
7 |
marsman-template
8 | <%= svg('marsman-template') %>
9 |
10 |
11 |
12 |
Login
13 |
14 | <%= link_to 'Sign up', '/sign-up.html' %>
15 | <%= link_to 'Sign in', '/sign-in.html' %>
16 | <%= link_to 'Reset Password', '/reset-password.html' %>
17 | <%= link_to 'Terms and conditions', '/terms-and-conditions.html' %>
18 |
19 |
Example pages
20 |
21 | <%= link_to 'Whole page text', '/whole-page-text.html' %>
22 |
23 |
24 |
25 |
Others
26 |
27 | <%= link_to 'Toolkit', '/toolkit.html' %>
28 | <%= link_to '404', '/404.html' %>
29 | <%= link_to 'Maintenance', '/maintenance.html' %>
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/source/javascripts/body.js:
--------------------------------------------------------------------------------
1 | import './body/jquery.custom-file-input';
2 | import './body/maxlength';
3 | import './body/modals';
4 | import './body/open-menu';
5 | import './body/popover';
6 | import './body/scrollTo';
7 | import './body/select2';
8 | import './body/tippy';
9 |
--------------------------------------------------------------------------------
/source/javascripts/body/$_get.js:
--------------------------------------------------------------------------------
1 | export function $_GET(param) {
2 | var vars = {};
3 | window.location.href.replace( location.hash, '' ).replace(
4 | /[?&]+([^=&]+)=?([^&]*)?/gi, // regexp
5 | function( m, key, value ) { // callback
6 | vars[key] = value !== undefined ? value : '';
7 | }
8 | );
9 |
10 | if ( param ) {
11 | return vars[param] ? vars[param] : null;
12 | }
13 | return vars;
14 | }
15 |
--------------------------------------------------------------------------------
/source/javascripts/body/jquery.custom-file-input.js:
--------------------------------------------------------------------------------
1 | /*
2 | By Osvaldas Valutis, www.osvaldas.info
3 | Available for use under the MIT License
4 | */
5 |
6 | 'use strict';
7 |
8 | ;( function( $, window, document, undefined )
9 | {
10 |
11 | var $inputfile = $( '.input-file' );
12 | if ( $inputfile.length ) {
13 | $inputfile.each( function(){
14 | var $input = $( this ),
15 | $label = $input.next( 'label' ),
16 | labelVal = $label.html();
17 |
18 | $input.on( 'change', function( e )
19 | {
20 | var fileName = '';
21 |
22 | if( this.files && this.files.length > 1 )
23 | fileName = ( this.getAttribute( 'data-multiple-caption' ) || '' ).replace( '{count}', this.files.length );
24 | else if( e.target.value )
25 | fileName = e.target.value.split( '\\' ).pop();
26 |
27 | if( fileName )
28 | $label.addClass('active').html( fileName );
29 | else
30 | $label.removeClass('active').html( labelVal );
31 | });
32 |
33 | // Firefox bug fix
34 | $input
35 | .on( 'focus', function(){ $input.addClass( 'has-focus' ); })
36 | .on( 'blur', function(){ $input.removeClass( 'has-focus' ); });
37 | });
38 | }
39 | })( jQuery, window, document );
40 |
--------------------------------------------------------------------------------
/source/javascripts/body/maxlength.js:
--------------------------------------------------------------------------------
1 | (function () {
2 | 'use strict';
3 |
4 | var $input = $('textarea[maxlength]'),
5 | spanClass = 'character-counter';
6 |
7 | function chractersCounter($element) {
8 | var left = $element.attr('maxlength') - $element.val().length;
9 |
10 | if (left < 0) {
11 | left = 0;
12 | }
13 |
14 | $element
15 | .attr('data-characters-counter', left)
16 | .prev('.'+spanClass)
17 | .attr('class', statusCounter(left)+' '+spanClass)
18 | .text(signCounter(left));
19 | }
20 |
21 | function statusCounter(num){
22 | if(num >= 20){
23 | return 'success';
24 | }else{
25 | return "warning";
26 | }
27 | }
28 |
29 | function signCounter(num){
30 | if(num <= 0){
31 | return num;
32 | }
33 | return '-'+num;
34 | }
35 |
36 | function createCounter($element){
37 | $element.before( ' ' );
38 | }
39 |
40 | function positionCounter($element){
41 | var $counter = $element.prev('.'+spanClass),
42 | position = $element.position(),
43 | width = $element.outerWidth(),
44 | height = $element.outerHeight(),
45 | zindex = ($element.css("z-index")) ? "inherit" : $element.css("z-index")+1;
46 |
47 | $counter
48 | .css('top', position.top + height)
49 | .css('left',position.left + width)
50 | .css('z-index', zindex);
51 | }
52 |
53 | function init(){
54 | $input.each(function(){
55 | createCounter($(this));
56 | positionCounter($(this));
57 | chractersCounter($(this));
58 | })
59 | }
60 |
61 | init();
62 |
63 | $input
64 | .keyup(function () {
65 | chractersCounter($(this));
66 | })
67 | .keydown(function() {
68 | chractersCounter($(this));
69 | })
70 | .change(function (){
71 | chractersCounter($(this));
72 | });
73 |
74 | $(window).resize(function(){
75 | $input.each(function(){
76 | positionCounter($(this));
77 | });
78 | });
79 |
80 | })();
--------------------------------------------------------------------------------
/source/javascripts/body/modals.js:
--------------------------------------------------------------------------------
1 | import { $_GET } from './$_get';
2 |
3 | (function () {
4 | 'use strict';
5 |
6 | var $modals = $('.modal');
7 |
8 | if($modals.length){
9 | $modals.each(function(){
10 | $(this).insertAfter('.footer');
11 | });
12 | }
13 |
14 | var $target = $('#'+$_GET('modal'));
15 |
16 | if($target.length){
17 | $target.modal('show');
18 | }
19 |
20 | })();
21 |
--------------------------------------------------------------------------------
/source/javascripts/body/open-menu.js:
--------------------------------------------------------------------------------
1 | (function () {
2 | 'use strict';
3 |
4 | var $button = $('.btn-collapse');
5 |
6 | $button.on('click',function(){
7 | $(this).toggleClass('active');
8 | $('body').toggleClass('open-menu');
9 | });
10 |
11 | })();
--------------------------------------------------------------------------------
/source/javascripts/body/popover.js:
--------------------------------------------------------------------------------
1 | (function () {
2 | 'use strict';
3 |
4 | var $element = $('[data-toggle="popover"],.popover-icon');
5 |
6 | $element.each(function(){
7 | if($(this).data('popover')=='html'){
8 | $element.click(function(e){
9 | e.preventDefault();
10 | }).popover({
11 | html: true,
12 | container: 'body',
13 | placement: 'auto bottom',
14 | content: $(this).next().html(),
15 | template: ''
16 | }).addClass('html');
17 | }else{
18 | $element.click(function(e){
19 | e.preventDefault();
20 | }).popover({
21 | container: 'body',
22 | placement: 'auto top'
23 | });
24 | }
25 | })
26 |
27 | $(document).on('click', function(e) {
28 | $element.each(function() {
29 | //the 'is' for buttons that trigger popups
30 | //the 'has' for icons within a button that triggers a popup
31 | if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
32 | $(this).popover('hide').data('bs.popover').inState.click = false // fix for BS 3.3.6
33 | }
34 |
35 | });
36 | });
37 |
38 |
39 | })();
--------------------------------------------------------------------------------
/source/javascripts/body/scrollTo.js:
--------------------------------------------------------------------------------
1 | (function () {
2 | 'use strict';
3 |
4 | var $scrollers = $('html,body,.wrapper');
5 |
6 | function scrollTo($e){
7 | var header_position = $('header.header').css('position');
8 |
9 | if(header_position == 'fixed'){
10 | $scrollers.animate({
11 | scrollTop: $e.offset().top - $('.wrapper').offset().top},
12 | 'slow');
13 | }else{
14 | $scrollers.animate({
15 | scrollTop: $e.offset().top},
16 | 'slow');
17 | }
18 | }
19 |
20 | $('a[href*="#"]:not([href="#"])').click(function() {
21 | if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
22 | var target = $(this.hash);
23 | target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
24 | if (target.length) {
25 | scrollTo(target)
26 | return false;
27 | }
28 | }
29 | });
30 |
31 | })();
32 |
--------------------------------------------------------------------------------
/source/javascripts/body/select2.js:
--------------------------------------------------------------------------------
1 | import * as _ from 'lodash';
2 |
3 | (function () {
4 | 'use strict';
5 |
6 | var $s2 = $('.select2');
7 |
8 | $s2.each(function(){
9 | var params = {},
10 | css;
11 |
12 | if (!$(this).hasClass('search')){
13 | _.extend(params, {minimumResultsForSearch: Infinity});
14 | }
15 | if ($(this).hasClass('success')){
16 | //_.extend(params, {containerCss: ".success"});
17 | css= 'success';
18 | }
19 | if ($(this).hasClass('warning')){
20 | //_.extend(params, {containerCss: ".warning"});
21 | css = 'warning';
22 | }
23 |
24 | $(this)
25 | .select2(params)
26 | .next('.select2-container')
27 | .addClass(css);
28 |
29 | $(this).on("select2-open", function() {
30 | $(this).select2('positionDropdown', true);
31 | });
32 |
33 | })
34 |
35 | })();
36 |
--------------------------------------------------------------------------------
/source/javascripts/body/tippy.js:
--------------------------------------------------------------------------------
1 | import tippy from 'tippy.js';
2 |
3 | $(document).ready(function() {
4 | tippy('.tooltip-wrapper-mobile .tooltip-trigger', {
5 | arrow: true,
6 | arrowType: 'skinny'
7 | });
8 | tippy('.tooltip-wrapper .tooltip-trigger', {
9 | arrow: true,
10 | arrowType: 'skinny',
11 | placement: 'right'
12 | });
13 | });
14 |
--------------------------------------------------------------------------------
/source/javascripts/head.js:
--------------------------------------------------------------------------------
1 | import 'modernizr';
2 |
--------------------------------------------------------------------------------
/source/layouts/basic.erb:
--------------------------------------------------------------------------------
1 | <% wrap_layout :layout do %>
2 | <%= partial 'partials/nav-responsive' %>
3 | <%= partial 'partials/header' %>
4 |
5 |
6 |
7 | <%= yield %>
8 |
9 |
10 |
11 | <%= partial 'partials/footer' %>
12 |
13 | <% end %>
14 |
15 |
--------------------------------------------------------------------------------
/source/layouts/layout.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | marsman template | <%= current_page.data.title %>
11 |
12 | <%= stylesheet_pack_tag 'application' %>
13 |
14 | <%= javascript_pack_tag 'manifest' %>
15 | <%= javascript_pack_tag 'head' %>
16 | <%= javascript_pack_tag 'vendor' %>
17 |
18 |
19 | Top page
20 | <%= partial "partials/shapes" %>
21 |
22 | <%= yield %>
23 |
24 | <%= javascript_pack_tag 'body' %>
25 |
26 |
27 |
--------------------------------------------------------------------------------
/source/layouts/primary.erb:
--------------------------------------------------------------------------------
1 | <% wrap_layout :layout do %>
2 |
3 |
4 |
5 | marsman-template
6 | <%= link_to svg('marsman-template-negative'), '/index.html' %>
7 |
8 | <%= yield %>
9 |
10 | <%= partial 'partials/footer' %>
11 |
12 | <% end %>
13 |
14 |
--------------------------------------------------------------------------------
/source/maintenance.html.erb:
--------------------------------------------------------------------------------
1 | ---
2 | title: Maintenance
3 | layout: primary
4 | body: 404 error
5 | ---
6 |
7 |
8 |
9 |
10 | <%= svg('maintenance') %>
11 |
12 |
MarsMan is currently undergoing some maintenance.
13 |
Thank you for your understanding. We will be back in few minutes.
14 |
15 | <%= link_to 'Take me back home', '/index.html', class:'btn-secondary' %>
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/source/partials/_alert.html.erb:
--------------------------------------------------------------------------------
1 |
3 | <% if locals[:dismissible] == true %>
4 |
6 | ×
7 |
8 | <% end %>
9 | <%= yield %>
10 |
--------------------------------------------------------------------------------
/source/partials/_footer.html.erb:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/source/partials/_header.html.erb:
--------------------------------------------------------------------------------
1 |
50 |
--------------------------------------------------------------------------------
/source/partials/_nav-responsive.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | <%= link_to 'Shop', '/index.html', class:'pills__link active' %>
7 | <%= link_to 'Company', '/index.html', class:'pills__link' %>
8 | <%= link_to 'Platform', '/index.html', class:'pills__link' %>
9 |
10 |
11 |
--------------------------------------------------------------------------------
/source/reset-password.html.erb:
--------------------------------------------------------------------------------
1 | ---
2 | title: Reset password
3 | layout: primary
4 | versions: error
5 | body: reset-password
6 | ---
7 |
8 |
9 |
10 |
13 |
14 |
15 | Enter your email address and we will send you a link to reset your password.
16 |
17 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/source/shapes/404.svg:
--------------------------------------------------------------------------------
1 | 404
--------------------------------------------------------------------------------
/source/shapes/icon-caret-down.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | icon-caret-down
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/source/shapes/maintenance.svg:
--------------------------------------------------------------------------------
1 | maintenance
--------------------------------------------------------------------------------
/source/shapes/marsman-template-negative.svg:
--------------------------------------------------------------------------------
1 | marsman-template-negative
--------------------------------------------------------------------------------
/source/shapes/marsman-template.svg:
--------------------------------------------------------------------------------
1 | marsman-template
--------------------------------------------------------------------------------
/source/sign-in.html.erb:
--------------------------------------------------------------------------------
1 | ---
2 | title: Sign in
3 | layout: primary
4 | versions: error
5 | body: sign-in
6 | ---
7 |
8 |
41 |
--------------------------------------------------------------------------------
/source/sign-up.html.erb:
--------------------------------------------------------------------------------
1 | ---
2 | title: Sign up
3 | layout: primary
4 | versions: error
5 | body: sign-in
6 | ---
7 |
8 |
49 |
--------------------------------------------------------------------------------
/source/stylesheets/application.scss:
--------------------------------------------------------------------------------
1 | $fa-font-path: '~font-awesome/fonts';
2 |
3 | @import "~font-awesome/scss/font-awesome";
4 | @import 'utilities/variables';
5 |
6 | @import 'utilities/mixins';
7 | @import 'utilities/helpers';
8 | @import 'utilities/keyframes';
9 | @import 'utilities/normalize';
10 |
11 | @import 'base/grid';
12 | @import 'base/fonts';
13 | @import 'base/buttons';
14 | @import 'base/forms';
15 | @import 'base/forms__checkbox';
16 | @import 'base/forms__radio';
17 | @import 'base/forms__input-file';
18 | @import 'base/tables';
19 | @import 'base/icons';
20 | @import 'base/general';
21 |
22 | @import 'plugins/tippy';
23 |
24 | @import 'blocks/actions';
25 | @import 'blocks/alert';
26 | @import 'blocks/badge';
27 | @import 'blocks/box';
28 | @import 'blocks/card-css';
29 | @import 'blocks/dropdown';
30 | @import 'blocks/footer';
31 | @import 'blocks/header';
32 | @import 'blocks/hero';
33 | @import 'blocks/main-content';
34 | @import 'blocks/modals';
35 | @import 'blocks/nav-inline';
36 | @import 'blocks/nav-pills';
37 | @import 'blocks/nav-responsive';
38 | @import 'blocks/pagination';
39 | @import 'blocks/pills';
40 | @import 'blocks/popover';
41 | @import 'blocks/progress-bar';
42 | @import 'blocks/select2';
43 | @import 'blocks/separator';
44 | @import 'blocks/user-info';
45 | @import 'blocks/tooltip';
46 |
47 | @import 'layouts/home';
48 | @import 'layouts/primary';
49 | @import 'layouts/toolkit';
50 |
--------------------------------------------------------------------------------
/source/stylesheets/base/_buttons.scss:
--------------------------------------------------------------------------------
1 | $btn-line-height: $components-line-height;
2 | $btn-components-padding: $components-padding;
3 |
4 | %btn {
5 | display: inline-block;
6 | vertical-align: middle;
7 | margin-bottom: 0; // For input.btn
8 | font-weight: normal;
9 | text-align: center;
10 | touch-action: manipulation;
11 | cursor: pointer;
12 | background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
13 | border: 1px solid transparent;
14 | user-select: none;
15 | max-width: 100%;
16 | transition: all .2s ease-out;
17 |
18 | &.is-block{
19 | width: 100%;
20 | min-width: auto;
21 | margin-bottom: 1em;
22 | }
23 |
24 | &.is-wide{
25 | min-width: 12em;
26 | }
27 | }
28 |
29 | @mixin button-color($color, $bg, $border: transparent, $color--active: $color,
30 | $bg--active: darken($bg, 15%), $border--active: $border) {
31 | color: $color;
32 | background-color: $bg;
33 | border-color: $border;
34 |
35 | &:hover {
36 | color: $color--active;
37 | background-color: $bg--active;
38 | border-color: $border--active;
39 | outline: 0;
40 | text-decoration: none;
41 | }
42 |
43 | &:focus {
44 | @include focus($bg, .8);
45 | text-decoration: none;
46 | }
47 |
48 | &.disabled,
49 | &[disabled],
50 | fieldset[disabled] & {
51 | cursor: not-allowed;
52 | pointer-events: none; // Future-proof disabling of clicks
53 | opacity: .65;
54 | box-shadow: none;
55 | }
56 | }
57 |
58 | @mixin button-size($padding, $font-size,
59 | $line-height, $border-radius) {
60 | padding: $padding;
61 | font-size: $font-size;
62 | line-height: $line-height;
63 | border-radius: $border-radius;
64 | }
65 |
66 | button{
67 | color: inherit;
68 | border: 0;
69 | background-color: transparent;
70 | padding: 0;
71 | margin: 0;
72 | appearance: none;
73 | &:hover,
74 | &:focus,
75 | &:active{
76 | outline: 0;
77 | text-decoration: none;
78 | }
79 | }
80 |
81 | .btn{
82 | @extend %btn;
83 | &:hover,
84 | &.active,
85 | &:focus{
86 | text-decoration: none;
87 | }
88 | }
89 |
90 | .btn-primary{
91 | @extend %btn;
92 | @include button-color(white,$primary);
93 | @include button-size($btn-components-padding, inherit, $btn-line-height, 3px);
94 | }
95 |
96 | .btn-primary-light{
97 | @extend %btn;
98 | @include button-color($primary,$primary-lighter, transparent,
99 | $primary, lighten($primary, 30%), $primary);
100 | @include button-size($btn-components-padding, inherit, $btn-line-height, 3px);
101 | }
102 |
103 | .btn-secondary{
104 | @extend %btn;
105 | @include button-color(white, $secondary-light);
106 | @include button-size($btn-components-padding, inherit, $btn-line-height, 3px);
107 | }
108 |
109 | .btn-secondary-light{
110 | @extend %btn;
111 | @include button-color($secondary-light, $secondary-lighter, transparent,
112 | $secondary-light, lighten($secondary-light, 45%), $secondary-light);
113 | @include button-size($btn-components-padding, inherit, $btn-line-height, 3px);
114 | }
115 |
116 | .btn-icon{
117 | @extend %btn;
118 | @include button-size($btn-components-padding, 1em, 2.2em, 50%);
119 | color: $font-color;
120 | border: 1px solid $border-color;
121 | width: 2.3em;
122 | height: 2.3em;
123 | opacity: .7;
124 | transform: scale(1);
125 | transition: all .2s ease-out;
126 | position: relative;
127 |
128 | //fix position icon
129 | &::before {
130 | position: absolute;
131 | top: 50%;
132 | left: 50%;
133 | transform: translate(-50%, -50%);
134 | }
135 |
136 | &:hover{
137 | transform: scale(1.1);
138 | text-decoration: none;
139 | opacity: 1;
140 | }
141 | }
142 |
143 | .btn-collapse{
144 | $size: 30px;
145 | $color: $secondary-light;
146 |
147 | color: $color;
148 | width: $size + 10px;
149 | height: $size;
150 | cursor: pointer;
151 | outline: 0;
152 | overflow: hidden;
153 | transition: transform ease-in-out 250ms;
154 | top: 20px;
155 |
156 | @media screen and (min-width: $grid-breakpoint){
157 | display: none;
158 | }
159 |
160 | &.active{
161 | span{
162 | border-color: transparent;
163 | transform: translateY(-4px) translateX(-8px);
164 |
165 | &::before{
166 | transform: rotate(405deg) translateY(-1px) translateX(1px);
167 | }
168 | &::after{
169 | transform: rotate(315deg) translateY(12px) translateX(-13px);
170 | }
171 | }
172 | }
173 |
174 | span{
175 | display: block;
176 | width: 25px;
177 | position: relative;
178 | top: 3px;
179 | left: 50%;
180 | border-top: 3px solid;
181 | text-indent: 99999px;
182 | overflow: hidden;
183 | white-space: nowrap;
184 | transition: transform ease-in-out 250ms,border ease-in-out 250ms;
185 | transform: translateX(-50%);
186 |
187 | &::before,
188 | &::after{
189 | position: absolute;
190 | content: "";
191 | display: block;
192 | height: 3px;
193 | width: 25px;
194 | background: $color;
195 | transform-origin: 0 0;
196 | top: 0;
197 | transition: transform ease-in-out 450ms;
198 | transform: translateY(5px);
199 | }
200 | &:after{
201 | transform: translateY(13px);
202 | }
203 | }
204 | }
205 |
206 |
--------------------------------------------------------------------------------
/source/stylesheets/base/_fonts.scss:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css?family=Karla:400,700');
2 |
3 | $font-family-base: 'Karla', sans-serif;
4 | $line-height-base: 1.5;
5 | $fs-base: 1.6rem;
6 | $fs-large: 2rem;
7 | $fs-small: 1.3rem;
8 | $fs-h1: 2.5rem;
9 | $fs-h2: $fs-large;
10 | $fs-h3: $fs-base;
11 | $fs-h4: $fs-base;
12 | $fs-h5: $fs-base;
13 | $fs-h6: $fs-small;
14 |
15 | html {
16 | font-size: 62.5%; /* Now 10px = 1rem! */
17 | font-smoothing: antialiased;
18 | text-shadow: rgba(0,0,0,.01) 0 0 1px;
19 | }
20 |
21 | body {
22 | font-family: $font-family-base;
23 | font-size: $fs-base;
24 | color: $font-color;
25 | line-height: $line-height-base;
26 | }
27 |
28 | @mixin content-blocks{
29 | & + p, & + ul, & + ol, & + blockquote, & + .content-block{
30 | @content;
31 | }
32 | }
33 |
34 | p,ul,ol,blockquote,.content-block{
35 | margin-top: 0;
36 | margin-bottom: 1.8em;
37 | @include content-blocks{
38 | margin-top: -.8em;
39 | }
40 |
41 | }
42 |
43 | ul{
44 | padding-left: 1.1em;
45 | }
46 |
47 | li{
48 | margin-bottom: .25em;
49 | }
50 |
51 | blockquote {
52 | border-left: 4px solid $primary;
53 | padding-left: 1em;
54 | font-size: $fs-h3;
55 | font-weight: bold;
56 | margin-left: 0;
57 | margin-right: 0;
58 | margin-top: 0;
59 | max-width: 600px
60 | }
61 |
62 | h1,.h1{
63 | font-size: $fs-h1;
64 | margin-top: 0;
65 | margin-bottom: 1rem;
66 | }
67 |
68 | h2,.h2{
69 | font-size: $fs-h2;
70 | margin-top: 0;
71 | margin-bottom: 1rem;
72 | }
73 |
74 | h3,.h3{
75 | font-size: $fs-h3;
76 | margin-top: 0;
77 | margin-bottom: 1rem
78 | }
79 |
80 | h4,.h4{
81 | font-size: $fs-h3;
82 | margin-top: 0;
83 | margin-bottom: 1rem
84 | }
85 |
86 | h5,.h5{
87 | font-size: $fs-h3;
88 | margin-top: 0;
89 | margin-bottom: 1rem
90 | }
91 |
92 | h6,.h6{
93 | font-size: $fs-h3;
94 | margin-top: 0;
95 | margin-bottom: 1rem
96 | }
97 |
98 | //extend sizes
99 | .s1{font-size: $fs-h1;}
100 | .s2{font-size: $fs-h2;}
101 | .s3{font-size: $fs-h3;}
102 | .s4{font-size: $fs-h4;}
103 | .s5{font-size: $fs-h5;}
104 | .s5{font-size: $fs-h6;}
105 | .large{font-size: $fs-large;}
106 | .small{font-size: $fs-small;}
107 |
108 | hgroup{
109 | @include last-margin;
110 | h1,.s1{
111 | margin-bottom: .2em;
112 | + *{
113 | font-weight: normal;
114 | }
115 | }
116 | }
--------------------------------------------------------------------------------
/source/stylesheets/base/_forms.scss:
--------------------------------------------------------------------------------
1 | $input-disabled: .3;
2 | $input-border: 1px solid $border-color;
3 | $input-border-readonly: 1px solid #f8f8fa;
4 | $input-border-radius: $border-radius;
5 | $input-padding: .4em 1em;
6 | $input-margin: .5em;
7 | $input-placeholder: $font-color-light;
8 | $input-success: $success;
9 | $input-warning: $warning;
10 | $input-line-height: $components-line-height;
11 | $info-field-fs: $fs-small;
12 |
13 | form {
14 | @include last-margin;
15 | }
16 |
17 | .form-inline {
18 | @extend .columns;
19 | margin-bottom: 1.5em;
20 |
21 | > * {
22 | @media (min-width: $screen-sm) {
23 | margin-bottom: 0;
24 | }
25 | }
26 |
27 | &__title {
28 | @media (min-width: $screen-md) {
29 | width: 50%;
30 | }
31 | @media (min-width: $screen-sm) {
32 | text-align: right;
33 | padding-top: .5em;
34 | }
35 | }
36 | }
37 |
38 | .form-group {
39 | margin-bottom: 1.2em;
40 | @include last-margin;
41 |
42 | &__item {
43 | @include margin-bottom(.5em);
44 | }
45 |
46 | &.warning {
47 | .info-field {
48 | color: $input-warning;
49 | }
50 | }
51 |
52 | &.success {
53 | .info-field {
54 | color: $input-success;
55 | }
56 | }
57 | }
58 |
59 | %input-bg {
60 | background-repeat: no-repeat;
61 | background-size: 1em;
62 | background-position: calc(100% - .5em) center;
63 | padding-right: 2em;
64 | }
65 |
66 | %form-item {
67 | appearance: none;
68 | width: 100%;
69 | max-width: 100%;
70 | display: block;
71 | color: $font-color;
72 | border: $input-border;
73 | border-radius: $input-border-radius;
74 | padding: $input-padding;
75 | transition: background .2s ease-out, border .2s ease-out;
76 | background-image: none;
77 | background-color: white;
78 | margin-bottom: $input-margin;
79 | line-height: $input-line-height;
80 |
81 | &:last-child {
82 | margin-bottom: 0;
83 | }
84 |
85 | &:focus {
86 | @include focus;
87 | }
88 |
89 | &::placeholder {
90 | color: $input-placeholder;
91 | opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526
92 | }
93 |
94 | &.inline {
95 | display: inline-block;
96 | width: auto;
97 | & + & {
98 | margin-left: $gutter/2;
99 | }
100 | }
101 |
102 | &:required,
103 | &.required {
104 | @extend %input-bg;
105 | background-image: image-url("icon-required.svg");
106 | }
107 |
108 | &.success,
109 | .form-group.success & {
110 | @extend %input-bg;
111 | animation: escale10 .5s ease-out;
112 | border: 1px solid $input-success;
113 | background-image: image-url("icon-success.svg");
114 |
115 | &:focus {
116 | @include focus(rgba($input-success, .4));
117 | }
118 | }
119 |
120 | &.warning + .info-field {
121 | color: $input-success
122 | }
123 |
124 | &.warning,
125 | .form-group.warning & {
126 | @extend %input-bg;
127 | animation: escale10 .5s ease-out;
128 | border: 1px solid $input-warning;
129 | background-image: image-url("icon-warning.svg");
130 |
131 | &:focus {
132 | @include focus(rgba($input-warning, .4));
133 | }
134 | }
135 |
136 | &.warning + .info-field {
137 | color: $input-warning
138 | }
139 | }
140 |
141 | label {
142 | display: block;
143 | max-width: 100%;
144 | line-height: 1.5em;
145 | margin-bottom: $input-margin;
146 |
147 | &.required::after {
148 | content: "*";
149 | margin-left: .25em;
150 | }
151 | }
152 |
153 | .info-field {
154 | width: 100%;
155 | display: block;
156 | font-size: $info-field-fs;
157 | margin-bottom: $input-margin;
158 | }
159 |
160 | input[disabled] {
161 | opacity: $input-disabled;
162 | pointer-events: none;
163 |
164 | + label {
165 | pointer-events: none;
166 | opacity: $input-disabled;
167 | }
168 | }
169 |
170 | input[readonly] {
171 | border: $input-border-readonly;
172 | pointer-events: none;
173 |
174 | + label {
175 | pointer-events: none;
176 | }
177 | }
178 |
179 | input:not([type="submit"]) {
180 | @extend %form-item;
181 |
182 | &.search {
183 | @extend %input-bg;
184 | background-color: $secondary-lighter;
185 | transition: all .2s ease-out;
186 | background-image: image-url("icon-search.svg");
187 | margin-bottom: 0;
188 |
189 | &:focus {
190 | background-color: white;
191 | }
192 | }
193 | }
194 |
195 | select {
196 | @extend %form-item;
197 | background-repeat: no-repeat;
198 | background-size: 1em;
199 | background-position: calc(100% - .7em) center;
200 | padding-right: 2em;
201 | background-image: image-url("icon-caret-down.svg") !important;
202 |
203 | &::-ms-expand {
204 | display: none;
205 | }
206 | }
207 |
208 | textarea {
209 | @extend %form-item;
210 |
211 | &[maxlength] {
212 | padding-bottom: 1.5em;
213 | resize: none;
214 | }
215 | }
216 |
217 | .character-counter {
218 | position: absolute;
219 | transform: translate(-100%, -100%);
220 | display: inline-block;
221 | pointer-events: none;
222 | padding: .5em;
223 |
224 | &.success {
225 | color: $input-success;
226 | }
227 | &.warning {
228 | color: $input-warning;
229 | }
230 | }
231 |
232 | .g-recaptcha {
233 | margin-top: .2em;
234 | margin-bottom: .8em;
235 | }
236 |
--------------------------------------------------------------------------------
/source/stylesheets/base/_forms__checkbox.scss:
--------------------------------------------------------------------------------
1 | //font awesome dependence
2 | $checkbox--scale: 0.9;
3 | $checkbox--size: 1.35em;
4 | $checkbox__icon: "\f096";
5 | $checkbox__icon--hover: "\f046";
6 | $checkbox__icon--checked: "\f14a";
7 | $checkbox--warning: $warning;
8 | $checkbox--success: $success;
9 |
10 | input[type="checkbox"]{
11 | @extend .sr-only;
12 |
13 | + label {
14 | display: inline-block;
15 | cursor: pointer;
16 | user-select: none;
17 | padding-right: .5em;
18 |
19 | &:last-child {
20 | padding-right: 0;
21 | }
22 |
23 | &.required::after{
24 | content: '';
25 | }
26 |
27 | &.warning{
28 | color: $checkbox--warning;
29 | }
30 |
31 | &.success{
32 | color: $checkbox--success;
33 | }
34 |
35 | &::before {
36 | @extend .fa;
37 | content: $checkbox__icon;
38 | display: inline-block;
39 | margin-right: .3em;
40 | vertical-align: middle;
41 | width: 1em;
42 | height: 1em;
43 | font-size: $checkbox--size;
44 | transition: all 0.3s ease-out;
45 | transform: scale(1);
46 | }
47 |
48 | &:hover::before {
49 | transform: scale($checkbox--scale);
50 | }
51 | }
52 |
53 | &:focus{
54 | + label::before {
55 | transform: scale($checkbox--scale);
56 | }
57 | }
58 |
59 | &:checked{
60 | + label::before {
61 | content: $checkbox__icon--checked;
62 | border: 0;
63 | transform: scale(1);
64 | }
65 | }
66 |
67 | &.warning,
68 | .form-group.warning & {
69 | & + label{
70 | color: $checkbox--warning;
71 |
72 | & + .info-field{
73 | color: $checkbox--warning;
74 | }
75 | }
76 | }
77 |
78 | &.warning + label + .info-field {
79 | color: $checkbox--warning;
80 | }
81 |
82 | &.success,
83 | .form-group.success & {
84 | + label {
85 | color: $checkbox--success;
86 |
87 | & + .info-field {
88 | color: $checkbox--success;
89 | }
90 | }
91 | }
92 |
93 | &.success + label + .info-field {
94 | color: $checkbox--success;
95 | }
96 | }
97 |
--------------------------------------------------------------------------------
/source/stylesheets/base/_forms__input-file.scss:
--------------------------------------------------------------------------------
1 | .input-file {
2 | $icon-color: $font-color;
3 |
4 | width: 0.1px;
5 | height: 0.1px;
6 | opacity: 0;
7 | overflow: hidden;
8 | position: absolute;
9 | z-index: -1;
10 |
11 | &:focus + label,
12 | & + label:hover{
13 | @include focus;
14 | }
15 |
16 | & + label{
17 | @extend %form-item;
18 | @include ellipsis;
19 | color: $input-placeholder;
20 |
21 | &.active{
22 | color: $icon-color;
23 | }
24 |
25 | &::before {
26 | @extend %icon;
27 | content: $fa-var-paperclip;
28 | color: $icon-color;
29 | font-size: 1.5em;
30 | margin-right: .25em;
31 | vertical-align: baseline;
32 | display: inline-block;
33 | }
34 |
35 | * {
36 | pointer-events: none;
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/source/stylesheets/base/_forms__radio.scss:
--------------------------------------------------------------------------------
1 | $radio-scale: 0.9;
2 | $radio-size: 1.2em;
3 | $radio-padding: 2px;
4 | $radio-dot-color: $font-color;
5 | $radio-warning: $warning;
6 | $radio-success: $success;
7 |
8 | input[type="radio"] {
9 | @extend .sr-only;
10 |
11 | + label {
12 | display: inline-block;
13 | padding-right: .5em;
14 | cursor: pointer;
15 | user-select: none;
16 |
17 | &[data-radio-input]::before {
18 | margin-right: 0;
19 | }
20 |
21 | &.required::after{
22 | content: '';
23 | }
24 |
25 | &::before {
26 | content: '';
27 | display: inline-block;
28 | padding: $radio-padding;
29 | width: $radio-size;
30 | height: $radio-size;
31 | margin-right: .5em;
32 | vertical-align: middle;
33 | border: 1px solid;
34 | border-radius: 50%;
35 | transition: all 0.3s ease-out, border-width 0.1s ease-in-out;
36 | transform: scale(1);
37 | background-color: transparent;
38 | background-clip: content-box;
39 | box-sizing: border-box;
40 | position: relative;
41 | top: -0.1em
42 | }
43 |
44 | &:hover::before {
45 | border-width: 2px;
46 | transform: scale($radio-scale);
47 | }
48 | }
49 |
50 | &:focus {
51 | + label::before {
52 | border-width: 2px;
53 | transform: scale($radio-scale);
54 | }
55 | }
56 |
57 | &:checked {
58 | + label::before {
59 | transform: scale(1);
60 | border-width: 2px;
61 | background-color: $radio-dot-color;
62 | }
63 | }
64 |
65 | &.success,
66 | .form-group.success & {
67 | &:checked + label::before {
68 | background-color: $radio-success;
69 | }
70 |
71 | + label{
72 | color: $radio-success;
73 |
74 | &::before {
75 | background-color: $radio-success;
76 | }
77 |
78 | & + .info-field{
79 | color: $radio-success;
80 | }
81 | }
82 |
83 | &.success + label + .info-field {
84 | color: $radio-success;
85 | }
86 | }
87 |
88 | &.warning,
89 | .form-group.warning & {
90 | &:checked + label::before {
91 | background-color: $radio-warning;
92 | }
93 |
94 | + label{
95 | color: $radio-warning;
96 | }
97 | }
98 |
99 | &.warning + label + .info-field {
100 | color: $radio-warning;
101 | }
102 | }
103 |
104 | .radio-input{
105 | border: 0 !important;
106 | background-image: none !important;
107 | width: auto;
108 | display: inline-block;
109 | padding: .2em !important;
110 | width: 4em;
111 | margin-bottom: 0;
112 | margin-left: -.5em;
113 | line-height: 1;
114 | }
115 |
--------------------------------------------------------------------------------
/source/stylesheets/base/_general.scss:
--------------------------------------------------------------------------------
1 | * { box-sizing: border-box; }
2 |
3 | html{
4 | height: 100%;
5 | }
6 |
7 | body {
8 | background-color: $background-primary;
9 | min-width: 320px;
10 | height: 100%;
11 | overflow-x: hidden;
12 | transition: transform .5s ease-out;
13 |
14 | @media (min-width: $grid-breakpoint){
15 | padding-left: 0;
16 | padding-right: 0;
17 | }
18 |
19 | &.open-menu{
20 | @media (max-width: $grid-breakpoint - 1){
21 | transform: translateX($nav-responsive-width);
22 | }
23 | }
24 | }
25 |
26 | .wrapper{
27 | position: relative;
28 | padding-left: 0;
29 | top: $header-height-breakpoint;
30 | height: calc(100% - #{$header-height-breakpoint});
31 | -webkit-overflow-scrolling: touch;
32 | overflow-y: auto;
33 |
34 | @media (min-width: $grid-breakpoint){
35 | height: auto;
36 | top: initial;
37 | }
38 | }
39 |
40 | ::selection { background: lighten($secondary,70%); }
41 |
42 | a,
43 | .link{
44 | text-decoration: none;
45 | color: $primary;
46 | &:hover,
47 | &.active,
48 | &:focus{
49 | outline: 0;
50 | text-decoration: underline;
51 | }
52 | }
53 |
54 | .fa{
55 | text-decoration: none;
56 | display: inline-block;
57 | &:hover,
58 | &.active,
59 | &:focus{
60 | outline: 0;
61 | text-decoration: none;
62 | }
63 | }
64 |
65 | img{
66 | max-width: 100%;
67 | height: auto;
68 | }
69 |
70 | .shape{
71 | width: 100%;
72 | max-height: 100%;
73 | }
74 |
75 | .list-tabulated {
76 | display: table;
77 | width: 100%;
78 |
79 | &__row{
80 | display: table-row;
81 |
82 | > * {
83 | display: table-cell;
84 | padding: .75em 0;
85 | border-bottom: 1px solid $secondary-lighter;
86 | }
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/source/stylesheets/base/_grid.scss:
--------------------------------------------------------------------------------
1 | //grid bootstrap based
2 | $grid-gutter-width: $gutter;
3 | $grid-columns: 12;
4 |
5 | $breakpoints: 'xxs','xs','sm','md','lg';
6 | $screen-xs: 460px;
7 | $screen-sm: 768px;
8 | $screen-md: 992px;
9 | $screen-lg: 1140px;
10 |
11 | $container-xs: 460px;
12 | $container-sm: 768px;
13 | $container-md: 990px;
14 | $container-lg: 1240px;
15 |
16 | $screens: "xxs" false,
17 | "xs" $screen-xs,
18 | "sm" $screen-sm,
19 | "md" $screen-md,
20 | "lg" $screen-lg;
21 |
22 | $grid-breakpoint: $screen-md;
23 |
24 | @mixin clearfix() {
25 | &:before,
26 | &:after {
27 | content: " ";
28 | display: table;
29 | }
30 | &:after {
31 | clear: both;
32 | }
33 | }
34 |
35 | @mixin container-fixed($gutter: $grid-gutter-width) {
36 | width: 100%;
37 | margin-right: auto;
38 | margin-left: auto;
39 | padding-left: $gutter;
40 | padding-right: $gutter;
41 | @include clearfix;
42 | }
43 |
44 | @mixin make-row($gutter: $grid-gutter-width) {
45 | margin-left: ($gutter / -2);
46 | margin-right: ($gutter / -2);
47 | @include clearfix;
48 | }
49 |
50 | @mixin make-column($columns, $gutter: $grid-gutter-width) {
51 | position: relative;
52 | float: left;
53 | width: percentage(($columns / $grid-columns));
54 | min-height: 1px;
55 | padding-left: ($gutter / 2);
56 | padding-right: ($gutter / 2);
57 | @include last-margin;
58 | }
59 |
60 | @mixin make-clear($columns, $clean: 0 ){
61 | &:nth-child(#{$columns}n + 1){
62 | clear: both;
63 | }
64 | @if $clean != 0{
65 | &:nth-child(#{$clean}n + 1) {
66 | clear: none;
67 | }
68 | }
69 | }
70 |
71 | @mixin make-xs-clear($columns, $clean: 0){
72 | @include make-clear($columns, $clean);
73 | }
74 |
75 | @mixin make-xxs-column($columns, $gutter: $grid-gutter-width) {
76 | @include make-column ($columns, $gutter);
77 | }
78 |
79 | @mixin make-xxs-column-offset($columns) {
80 | margin-left: percentage(($columns / $grid-columns));
81 | }
82 |
83 | @mixin make-xxs-column-push($columns) {
84 | left: percentage(($columns / $grid-columns));
85 | }
86 |
87 | @mixin make-xxs-column-pull($columns) {
88 | right: percentage(($columns / $grid-columns));
89 | }
90 |
91 | @mixin make-xs-column($columns, $gutter: $grid-gutter-width) {
92 | position: relative;
93 | min-height: 1px;
94 | padding-left: ($gutter / 2);
95 | padding-right: ($gutter / 2);
96 |
97 | @media (min-width: $screen-xs) {
98 | float: left;
99 | width: percentage(($columns / $grid-columns));
100 | @include last-margin;
101 | }
102 | }
103 |
104 | @mixin make-xs-clear($columns, $clean: 0){
105 | @media (min-width: $screen-xs) {
106 | @include make-clear($columns, $clean);
107 | }
108 | }
109 |
110 | @mixin make-xs-column-offset($columns) {
111 | @media (min-width: $screen-xs) {
112 | margin-left: percentage(($columns / $grid-columns));
113 | }
114 | }
115 |
116 | @mixin make-xs-column-push($columns) {
117 | @media (min-width: $screen-xs) {
118 | left: percentage(($columns / $grid-columns));
119 | }
120 | }
121 |
122 | @mixin make-xs-column-pull($columns) {
123 | @media (min-width: $screen-xs) {
124 | right: percentage(($columns / $grid-columns));
125 | }
126 | }
127 |
128 | @mixin make-sm-column($columns, $gutter: $grid-gutter-width) {
129 | position: relative;
130 | min-height: 1px;
131 | padding-left: ($gutter / 2);
132 | padding-right: ($gutter / 2);
133 |
134 | @media (min-width: $screen-sm) {
135 | float: left;
136 | width: percentage(($columns / $grid-columns));
137 | @include last-margin;
138 | }
139 | }
140 |
141 | @mixin make-sm-clear($columns, $clean: 0){
142 | @media (min-width: $screen-sm) {
143 | @include make-clear($columns, $clean);
144 | }
145 | }
146 |
147 | @mixin make-sm-column-offset($columns) {
148 | @media (min-width: $screen-sm) {
149 | margin-left: percentage(($columns / $grid-columns));
150 | }
151 | }
152 |
153 | @mixin make-sm-column-push($columns) {
154 | @media (min-width: $screen-sm) {
155 | left: percentage(($columns / $grid-columns));
156 | }
157 | }
158 |
159 | @mixin make-sm-column-pull($columns) {
160 | @media (min-width: $screen-sm) {
161 | right: percentage(($columns / $grid-columns));
162 | }
163 | }
164 |
165 | @mixin make-md-column($columns, $gutter: $grid-gutter-width) {
166 | position: relative;
167 | min-height: 1px;
168 | padding-left: ($gutter / 2);
169 | padding-right: ($gutter / 2);
170 |
171 | @media (min-width: $screen-md) {
172 | float: left;
173 | width: percentage(($columns / $grid-columns));
174 | @include last-margin;
175 | }
176 | }
177 |
178 | @mixin make-md-clear($columns, $clean: 0){
179 | @media (min-width: $screen-md) {
180 | @include make-clear($columns, $clean);
181 | }
182 | }
183 |
184 | @mixin make-md-column-offset($columns) {
185 | @media (min-width: $screen-md) {
186 | margin-left: percentage(($columns / $grid-columns));
187 | }
188 | }
189 |
190 | @mixin make-md-column-push($columns) {
191 | @media (min-width: $screen-md) {
192 | left: percentage(($columns / $grid-columns));
193 | }
194 | }
195 |
196 | @mixin make-md-column-pull($columns) {
197 | @media (min-width: $screen-md) {
198 | right: percentage(($columns / $grid-columns));
199 | }
200 | }
201 |
202 | @mixin make-lg-column($columns, $gutter: $grid-gutter-width) {
203 | position: relative;
204 | min-height: 1px;
205 | padding-left: ($gutter / 2);
206 | padding-right: ($gutter / 2);
207 |
208 | @media (min-width: $screen-lg) {
209 | float: left;
210 | width: percentage(($columns / $grid-columns));
211 | @include last-margin;
212 | }
213 | }
214 |
215 | @mixin make-lg-clear($columns, $clean: 0){
216 | @media (min-width: $screen-lg) {
217 | @include make-clear($columns, $clean);
218 | }
219 | }
220 |
221 | @mixin make-lg-column-offset($columns) {
222 | @media (min-width: $screen-lg) {
223 | margin-left: percentage(($columns / $grid-columns));
224 | }
225 | }
226 |
227 | @mixin make-lg-column-push($columns) {
228 | @media (min-width: $screen-lg) {
229 | left: percentage(($columns / $grid-columns));
230 | }
231 | }
232 |
233 | @mixin make-lg-column-pull($columns) {
234 | @media (min-width: $screen-lg) {
235 | right: percentage(($columns / $grid-columns));
236 | }
237 | }
238 |
239 | @mixin make-grid-columns {
240 | %make-grid-column{
241 | position: relative;
242 | // Prevent columns from collapsing when empty
243 | min-height: 1px;
244 | // Inner gutter via padding
245 | padding-left: ($grid-gutter-width / 2);
246 | padding-right: ($grid-gutter-width / 2);
247 | }
248 |
249 | @each $bp in $breakpoints {
250 | @for $i from 1 through $grid-columns {
251 | .col-#{$bp}-#{$i}{
252 | @extend %make-grid-column;
253 | }
254 | }
255 | }
256 | }
257 |
258 | // [converter] This is defined recursively in LESS, but Sass supports real loops
259 | @mixin float-grid-columns($class, $i: 1, $list: ".col-#{$class}-#{$i}") {
260 | @for $i from (1 + 1) through $grid-columns {
261 | $list: "#{$list}, .col-#{$class}-#{$i}";
262 | }
263 | #{$list} {
264 | float: left;
265 | @include last-margin;
266 | }
267 | }
268 |
269 | @mixin calc-grid-column($index, $class, $type) {
270 | @if ($type == width) and ($index > 0) {
271 | .col-#{$class}-#{$index} {
272 | width: percentage(($index / $grid-columns));
273 | }
274 | }
275 | @if ($type == push) and ($index > 0) {
276 | .col-#{$class}-push-#{$index} {
277 | left: percentage(($index / $grid-columns));
278 | }
279 | }
280 | @if ($type == push) and ($index == 0) {
281 | .col-#{$class}-push-0 {
282 | left: auto;
283 | }
284 | }
285 | @if ($type == pull) and ($index > 0) {
286 | .col-#{$class}-pull-#{$index} {
287 | right: percentage(($index / $grid-columns));
288 | }
289 | }
290 | @if ($type == pull) and ($index == 0) {
291 | .col-#{$class}-pull-0 {
292 | right: auto;
293 | }
294 | }
295 | @if ($type == offset) {
296 | .col-#{$class}-offset-#{$index} {
297 | margin-left: percentage(($index / $grid-columns));
298 | }
299 | }
300 | }
301 |
302 | @mixin loop-grid-columns($columns, $class, $type) {
303 | @for $i from 0 through $columns {
304 | @include calc-grid-column($i, $class, $type);
305 | }
306 | }
307 |
308 | @mixin make-grid($class) {
309 | @include float-grid-columns($class);
310 | @include loop-grid-columns($grid-columns, $class, width);
311 | @include loop-grid-columns($grid-columns, $class, pull);
312 | @include loop-grid-columns($grid-columns, $class, push);
313 | @include loop-grid-columns($grid-columns, $class, offset);
314 | }
315 |
316 | .container {
317 | @include container-fixed;
318 | max-width: 100%;
319 |
320 | @media (min-width: $screen-xs) {
321 | max-width: $container-sm;
322 | }
323 | @media (min-width: $screen-sm) {
324 | max-width: $container-md;
325 | }
326 | @media (min-width: $screen-md) {
327 | max-width: $container-lg;
328 | }
329 | @media (min-width: $screen-lg) {
330 | max-width: $container-lg;
331 | }
332 | }
333 |
334 | .container-xs {
335 | @include container-fixed;
336 | max-width: $container-xs;
337 | }
338 | .container-sm {
339 | @include container-fixed;
340 | max-width: $container-sm;
341 | }
342 | .container-md {
343 | @include container-fixed;
344 | max-width: $container-md;
345 | }
346 | .container-lg {
347 | @include container-fixed;
348 | max-width: $container-lg;
349 | }
350 |
351 | .container-fluid {
352 | @include container-fixed;
353 | }
354 |
355 | // Row
356 | .row {
357 | @include make-row;
358 | }
359 |
360 | // Columns
361 | @include make-grid-columns;
362 |
363 | // Extra Extra small grid
364 | @include make-grid(xxs);
365 |
366 | // Extra small grid
367 | @media (min-width: $screen-xs) {
368 | @include make-grid(xs);
369 | }
370 |
371 | // Small grid
372 | @media (min-width: $screen-sm) {
373 | @include make-grid(sm);
374 | }
375 |
376 | // Medium grid
377 | @media (min-width: $screen-md) {
378 | @include make-grid(md);
379 | }
380 |
381 | // Large grid
382 | @media (min-width: $screen-lg) {
383 | @include make-grid(lg);
384 | }
385 |
386 | .columns {
387 | display: table;
388 | table-layout: fixed;
389 | width: 100%;
390 |
391 | & > * {
392 | display: table-cell;
393 | vertical-align: top;
394 | padding-right: $gutter/2;
395 | padding-left: $gutter/2;
396 | &:first-child {
397 | padding-left: 0
398 | }
399 | &:last-child {
400 | padding-right: 0;
401 | }
402 | }
403 | }
404 |
405 | .clear{
406 | clear: both;
407 | }
408 |
409 | .clearfix{
410 | @include clearfix;
411 | }
412 |
413 | @media (max-width: $screen-xs - 1){
414 | .is-hidden-xxs{
415 | display: none !important;
416 | }
417 | [class*=is-visible]:not(.is-visible-xxs){
418 | display: none !important;
419 | }
420 | }
421 |
422 | @media (min-width: $screen-xs) and (max-width: $screen-sm - 1){
423 | .is-hidden-xs{
424 | display: none !important;
425 | }
426 | [class*=is-visible]:not(.is-visible-xs){
427 | display: none !important;
428 | }
429 | }
430 |
431 | @media (min-width: $screen-sm) and (max-width: $screen-md - 1){
432 | .is-hidden-sm{
433 | display: none !important;
434 | }
435 | [class*=is-visible]:not(.is-visible-sm){
436 | display: none !important;
437 | }
438 | }
439 |
440 | @media (min-width: $screen-md) and (max-width: $screen-lg - 1){
441 | .is-hidden-md{
442 | display: none !important;
443 | }
444 | [class*=is-visible]:not(.is-visible-md){
445 | display: none !important;
446 | }
447 | }
448 |
449 | @media (min-width: $screen-lg) {
450 | .is-hidden-lg{
451 | display: none !important;
452 | }
453 | [class*=is-visible]:not(.is-visible-lg){
454 | display: none !important;
455 | }
456 | }
457 |
--------------------------------------------------------------------------------
/source/stylesheets/base/_icons.scss:
--------------------------------------------------------------------------------
1 | %icon {
2 | @include fa-icon;
3 | text-decoration: none;
4 | vertical-align: middle;
5 |
6 | &:hover{
7 | text-decoration: none;
8 | }
9 | }
10 |
11 | .icon-loader {
12 | animation-duration: .75s;
13 | color: inherit;
14 | @extend %icon;
15 | @extend .fa-spin;
16 | @extend .fa-spinner;
17 | }
18 |
19 | .icon-edit {
20 | @extend %icon;
21 | @extend .fa-pencil;
22 | }
23 |
24 | .icon-cart {
25 | @extend %icon;
26 | @extend .fa-shopping-cart;
27 | }
28 |
29 | .icon-del {
30 | @extend %icon;
31 | @extend .fa-trash;
32 | }
33 |
34 | .icon-detail {
35 | @extend %icon;
36 | @extend .fa-chevron-right;
37 | }
38 |
39 | .icon-actions {
40 | @extend %icon;
41 | @extend .fa-ellipsis-v;
42 | }
43 |
44 | .icon-close {
45 | @extend %icon;
46 | @extend .fa-times;
47 | }
48 |
49 | .icon-search {
50 | @extend %icon;
51 | @extend .fa-search;
52 | }
53 |
54 | .icon-filter {
55 | @extend %icon;
56 | @extend .fa-filter;
57 | }
58 |
59 | .icon-add {
60 | @extend %icon;
61 | @extend .fa-plus;
62 | }
63 |
64 | .icon-logout {
65 | @extend %icon;
66 | @extend .fa-sign-out;
67 | }
68 |
69 | .icon-caret {
70 | @extend %icon;
71 | @extend .fa-caret-down;
72 |
73 | .dropdown.open .icon {
74 | @extend .fa-caret-up;
75 | }
76 | }
77 |
78 | .icon-on {
79 | @extend %icon;
80 | @extend .fa-toggle-on;
81 | }
82 |
83 | .icon-off {
84 | @extend %icon;
85 | @extend .fa-toggle-off;
86 | }
87 |
--------------------------------------------------------------------------------
/source/stylesheets/base/_tables.scss:
--------------------------------------------------------------------------------
1 | table {
2 | $color: $font-color;
3 | $bg-color: $background-primary;
4 |
5 | font-size: $fs-small;
6 | width: 100%;
7 | border-collapse: separate;
8 | border: 1px solid;
9 |
10 | tr {
11 | &.odd {
12 | background-color: $bg-color;
13 | }
14 |
15 | &.even {
16 | background-color: inherit;
17 | }
18 |
19 | }
20 |
21 | th {
22 | padding: .5em 1em;
23 | text-align: left;
24 | vertical-align: middle;
25 | background-color: $color;
26 | font-weight: normal;
27 | color: white;
28 | }
29 |
30 | td {
31 | padding: 1em;
32 | vertical-align: top;
33 | border-left: 1px solid lighten($color,50%);
34 | border-top: 1px solid lighten($color,50%);
35 |
36 | &:first-child {
37 | border-left: 0;
38 | }
39 | }
40 | }
41 |
42 |
43 | .cell{
44 | &-select {
45 | padding-right: 0;
46 | padding-bottom: 0;
47 | }
48 |
49 | &-actions{
50 | white-space: nowrap;
51 |
52 | > * {
53 | margin-left: .5em;
54 | &:first-child{
55 | margin-left: 0;
56 | }
57 | }
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_actions.scss:
--------------------------------------------------------------------------------
1 | .actions {
2 | $margin: .5em;
3 |
4 | text-align: right;
5 | margin-right: -$margin;
6 | margin-left: -$margin;
7 | display: flex;
8 | flex-direction: row;
9 | justify-content: space-between;
10 | flex-wrap: wrap;
11 | align-items: center;
12 | margin-bottom: -$margin;
13 | position: relative;
14 |
15 | > * {
16 | @include last-margin;
17 | margin-left: $margin;
18 | margin-right: $margin;
19 | margin-bottom: $margin;
20 | }
21 |
22 | &.has-buttons {
23 | margin-top: -.25em;
24 | }
25 |
26 | &__item {
27 | display: inline-block;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_alert.scss:
--------------------------------------------------------------------------------
1 | .alert{
2 | $padding: .5em 1em;
3 |
4 | border: 1px solid $warning;
5 | background-color: rgba($warning, .04);
6 | color: $warning;
7 | padding: $padding;
8 | border-radius: $border-radius;
9 | margin-bottom: 1em;
10 |
11 | &.dismissible{
12 | position: relative;
13 | padding-right: 2em;
14 | }
15 |
16 | &.warning{
17 | background-color: $warning;
18 | color: white;
19 | }
20 |
21 | &.success{
22 | background-color: $success;
23 | border-color: $success;
24 | color: white;
25 | }
26 |
27 | &__close{
28 | position: absolute;
29 | top: 0;
30 | right: 0;
31 | padding: $padding;
32 | color: inherit;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_badge.scss:
--------------------------------------------------------------------------------
1 | .badge {
2 | $margin: .5em;
3 |
4 | white-space: nowrap;
5 | vertical-align: middle;
6 | background-color: $primary;
7 | color: white;
8 | font-size: .9em;
9 | padding: .1em .25em;
10 | display: inline-block;
11 | min-width: 1.5em;
12 | text-align: center;
13 | border-radius: $border-radius;
14 | text-decoration: none;
15 | margin-left: $margin;
16 | margin-right: $margin;
17 |
18 | * > &:last-child {
19 | margin-right: 0;
20 | }
21 |
22 | * > &:first-child {
23 | margin-left: 0;
24 | }
25 | }
26 |
27 | [data-badge] {
28 | position: relative;
29 | padding-right: 3.5em !important;
30 |
31 | &::after{
32 | @extend .badge;
33 | content: attr(data-badge);
34 | position: absolute;
35 | right: 1em;
36 | top: 50%;
37 | transform: translateY(-50%);
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_box.scss:
--------------------------------------------------------------------------------
1 | .box {
2 | $padding: $gutter;
3 | $border-radius: 8px;
4 |
5 | padding: $padding;
6 | background: white;
7 | border: 1px solid $border-color;
8 | border-radius: $border-radius;
9 | margin-bottom: $gutter;
10 |
11 | @include last-margin;
12 |
13 | & > *:first-child {
14 | margin: -#{$padding} -#{$padding} 0;
15 | }
16 |
17 | &__header {
18 | min-height: 7rem;
19 | padding: $padding/2 $padding;
20 | background-color: $background-primary;
21 | border-radius: $border-radius $border-radius 0 0;
22 | border-bottom: 1px solid $border-color;
23 | display: flex;
24 | flex-direction: row;
25 | flex-wrap: wrap;
26 | justify-content: space-between;
27 | align-items: center;
28 |
29 | &.is-center{
30 | justify-content: center;
31 | text-align: center;
32 | > *{
33 | width: 100%;
34 | }
35 | }
36 | }
37 |
38 | &__title {
39 | margin: 0;
40 | }
41 |
42 | &__content {
43 | padding: $padding $padding 0;
44 | margin-left: -$padding;
45 | margin-right: -$padding;
46 | margin-bottom: $padding;
47 | position: relative;
48 | @include last-margin;
49 | }
50 |
51 | &__footer {
52 | border-top: 1px solid $border-color;
53 | padding: $padding;
54 | margin-left: -#{$padding};
55 | margin-right: -#{$padding};
56 | margin-bottom: -#{$padding} !important;
57 | border-radius: 0 0 $border-radius $border-radius;
58 | @include last-margin;
59 | }
60 |
61 | &__nav {
62 | text-align: right;
63 | > * {
64 | margin-left: .5em;
65 | }
66 | }
67 |
68 | &.is-wide{
69 | max-width: 940px;
70 | margin-left: auto;
71 | margin-right: auto;
72 | }
73 |
74 | &.is-transparent {
75 | background-color: transparent;
76 | border-color: transparent;
77 | box-shadow: none;
78 | border-radius: 0;
79 | padding-top: 0;
80 | padding-bottom: 0;
81 |
82 | .box__header {
83 | padding-bottom: 0;
84 | border-color: transparent;
85 | }
86 |
87 | .box__footer {
88 | border-color: transparent;
89 | }
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_card-css.scss:
--------------------------------------------------------------------------------
1 | $colors-list: "Primary" $primary,
2 | "Primary light" $primary-light,
3 | "Primary lighter" $primary-lighter,
4 | "Bg primary" $background-primary,
5 | "Secondary" $secondary,
6 | "Secondary light" $secondary-light,
7 | "Secondary lighter" $secondary-lighter,
8 | "Bg secondary" $background-secondary,
9 | "Success" $success,
10 | "Warning" $warning;
11 |
12 | @mixin card-css--color($content, $color){
13 | .card-css__block{ background-color: $color;}
14 |
15 | .card-css__text{
16 | &::before{ content: '#{$color}'}
17 | &::after{ content: '#{$content}';}
18 | }
19 | }
20 |
21 | .card-css{
22 | &__container{
23 | @include make-row;
24 | margin-bottom: -$gutter;
25 | }
26 |
27 | &__item{
28 | @include make-xs-column(3);
29 | @include make-xs-clear(4);
30 | @include make-sm-column(4);
31 | @include make-sm-clear(3, 4);
32 | @include make-md-column(3);
33 | @include make-md-clear(4, 3);
34 | @media (max-width: 600px){
35 | @include make-column(4);
36 | @include make-clear(3, 4);
37 | }
38 | @media (max-width: 480px){
39 | @include make-column(6);
40 | @include make-clear(2, 3);
41 | }
42 |
43 | margin-bottom: $gutter;
44 | }
45 |
46 | &__content{
47 | box-shadow: $shadow;
48 | border: 1px solid $border-color;
49 | }
50 |
51 | &__block{
52 | height: 9rem;
53 | position: relative;
54 | background-color: white;
55 | color: $font-color-light;
56 | }
57 |
58 | &__title{
59 | color: $font-color;
60 | display: block;
61 | }
62 |
63 | &__subtitle{
64 | color: $font-color-light;
65 | display: block;
66 | font-size: 1em;
67 | @include ellipsis;
68 | }
69 |
70 | &__text{
71 | padding: .5rem 1rem;
72 | height: 5rem;
73 | width: 100%;
74 | background-color: white;
75 | border-top: 1px solid $border-color;
76 | font-size: $fs-small;
77 | line-height: 1.4;
78 | display: flex;
79 | flex-direction: column;
80 | flex-wrap: nowrap;
81 | justify-content: center;
82 | align-content: flex-start;
83 | }
84 |
85 | &--colors-list{
86 | @extend .card-css__item;
87 |
88 | .card-css__text{
89 | &::before{
90 | content: 'Title';
91 | @extend .card-css__title;
92 | text-transform: uppercase;
93 | }
94 | &::after{
95 | content: 'Subtitle';
96 | @extend .card-css__subtitle;
97 | }
98 | }
99 |
100 | @each $color in $colors-list {
101 | $i: index($colors-list, $color);
102 | &:nth-child(#{$i}){
103 | @include card-css--color(nth($color, 1), nth($color, 2));
104 | }
105 | }
106 | }
107 |
108 | &--typography{
109 | @extend .card-css__item;
110 |
111 | .card-css__block{
112 | font-size: 4.1rem;
113 | display: flex;
114 | align-items: center;
115 | justify-content: center;
116 | }
117 | }
118 | }
119 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_dropdown.scss:
--------------------------------------------------------------------------------
1 | .dropdown {
2 | $zindex: 1000;
3 | $bkg: #fff;
4 | $border: lighten($primary,10%);
5 | $padding-top: .4em;
6 | $padding: $padding-top 1em;
7 | $bg-divider: $border;
8 | $link-color: $font-color;
9 | $link-hover-color: $primary;
10 | $link-hover-bkg: $font-color-light;
11 | $link-active-color: $primary;
12 | $link-active-bkg: $bkg ;
13 | $link-disabled-color: $font-color ;
14 | $header-color: $font-color ;
15 | $caret-color: #000 ;
16 |
17 | position: relative;
18 | display: inline-block;
19 |
20 | &:not(.no-icon) > *:first-child {
21 | &::after{
22 | @include fa-icon;
23 | margin-left: .25em;
24 | content: $fa-var-caret-down;
25 | transition: all .3s ease-out;
26 | opacity: .8
27 | }
28 |
29 | &:hover{
30 | &::after{
31 | opacity: 1;
32 | }
33 | }
34 | }
35 |
36 | &.open > *:first-child::after{
37 | transform: rotate(-180deg)
38 | }
39 |
40 | &-menu {
41 | position: absolute;
42 | top: 100%;
43 | left: 0;
44 | z-index: $zindex;
45 | display: none;
46 | float: left;
47 | min-width: 10em;
48 | padding: $padding-top 0;
49 | margin: .7em 0 0;
50 | list-style: none;
51 | text-align: left;
52 | background-color: $bkg;
53 | border: 1px solid $border;
54 | border-radius: $border-radius;
55 | box-shadow: $shadow;
56 | background-clip: padding-box;
57 |
58 | &::before,
59 | &::after{
60 | font-size: 10px;
61 | content: "";
62 | position: absolute;
63 | top: -.9em;
64 | left: 1em;
65 | border-width: 0 1em 1em;
66 | border-style: solid;
67 | border-color: $bkg transparent;
68 | display: block;
69 | width: 0;
70 | }
71 |
72 | &::before{
73 | margin-top: -1px;
74 | border-color: $border transparent;
75 | }
76 |
77 | .divider {
78 | height: 1px;
79 | margin-top: $padding-top;
80 | margin-bottom: $padding-top;
81 | background-color: $bg-divider;
82 | }
83 |
84 | li{
85 | margin: 0;
86 | }
87 |
88 | > li {
89 | > a {
90 | display: block;
91 | padding: $padding;
92 | clear: both;
93 | font-weight: normal;
94 | color: $link-color;
95 | white-space: nowrap; // prevent links from randomly breaking onto new lines
96 | &:hover,
97 | &:focus {
98 | text-decoration: none;
99 | color: $link-hover-color;
100 | background-color: $link-hover-bkg;
101 | }
102 | }
103 | }
104 |
105 | > .active > a {
106 | &,
107 | &:hover,
108 | &:focus {
109 | color: $link-active-color;
110 | text-decoration: none;
111 | outline: 0;
112 | background-color: $link-active-bkg;
113 | }
114 | }
115 |
116 | > .disabled > a {
117 | &,
118 | &:hover,
119 | &:focus {
120 | color: $link-disabled-color;
121 | }
122 |
123 | &:hover,
124 | &:focus {
125 | text-decoration: none;
126 | background-color: transparent;
127 | background-image: none; // Remove CSS gradient
128 | //@include reset-filter;
129 | cursor: not-allowed;
130 | }
131 | }
132 |
133 | .open > & {
134 | display: block;
135 | }
136 |
137 | &.is-right {
138 | left: auto; // Reset the default from `.dropdown-menu`
139 | right: 0;
140 |
141 | &::before,
142 | &::after{
143 | left: auto;
144 | right: 1em;
145 | }
146 | }
147 |
148 | &.is-left {
149 | left: 0;
150 | right: auto;
151 |
152 | &::before,
153 | &::after{
154 | right: auto;
155 | left: 1em;
156 | }
157 | }
158 |
159 | &.is-center {
160 | left: 50%;
161 | transform: translateX(-50%);
162 | right: auto;
163 |
164 | &::before,
165 | &::after{
166 | right: auto;
167 | left: 50%;
168 | transform: translateX(-50%);
169 | }
170 | }
171 |
172 | &.is-top{
173 | top: auto;
174 | bottom: 100%;
175 | margin-bottom: 10px;
176 | &::before,
177 | &::after{
178 | top: auto;
179 | bottom: -.9em;
180 | border-width: 1em 1em 0;
181 | }
182 | &::before{
183 | margin-top: 0px;
184 | margin-bottom: -1px;
185 | }
186 | }
187 | }
188 |
189 | &-backdrop {
190 | position: fixed;
191 | left: 0;
192 | right: 0;
193 | bottom: 0;
194 | top: 0;
195 | z-index: ($zindex - 10);
196 | }
197 |
198 | &-header,
199 | &-content {
200 | display: block;
201 | padding: $padding;
202 | white-space: nowrap; // as with > li > a
203 | }
204 | }
205 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_footer.scss:
--------------------------------------------------------------------------------
1 | .footer {
2 | &__main {
3 | padding: 50px 0;
4 | background-color: $background-secondary;
5 | border-top: 1px solid $border-color;
6 | border-bottom: 1px solid $border-color;
7 | }
8 |
9 | &__container {
10 | @extend .container;
11 | }
12 |
13 | &__link-groups {
14 | @include make-sm-column(6,0);
15 | @include make-row(0)
16 | }
17 |
18 | &__link-group {
19 | @include make-sm-column(4);
20 | margin-bottom: 2em;
21 | @media (min-width: $screen-sm){
22 | margin-bottom: 0;
23 | }
24 |
25 | ul {@extend .list-reset;}
26 |
27 | a {@extend .reset-link;}
28 | }
29 |
30 | &__social {
31 | margin-top: 2em;
32 | @include make-sm-column(6);
33 | @media (min-width: $screen-sm){
34 | text-align: right;
35 | margin-top: 0;
36 | }
37 | }
38 |
39 | &__social-icons{
40 | @extend .list-reset;
41 |
42 | li {
43 | display: inline-block;
44 | @media (min-width: $screen-sm){
45 | margin-left: .5em;
46 | }
47 | }
48 | }
49 |
50 | &__icon {
51 | $icons: 'github','instagram','envelope','medium','linkedin',
52 | 'facebook','google-plus','twitter';
53 |
54 | @each $icon in $icons {
55 | &--#{$icon} {
56 | @extend .btn-icon;
57 | @extend %icon;
58 | @extend .fa-#{$icon};
59 | }
60 | }
61 | }
62 |
63 | &__logo {
64 | height: 5rem;
65 | width: 18rem;
66 | display: inline-block;
67 | margin-bottom: 1em;
68 | }
69 |
70 | &__info {
71 | background-color: $background-primary;
72 | padding: 1.5em 0;
73 | }
74 |
75 | &__copyright {
76 | @include make-sm-column(10);
77 | line-height: $fs-h1;
78 | text-align: center;
79 | @media (min-width: $screen-sm) {
80 | text-align: inherit;
81 | }
82 | }
83 |
84 | &__top-page {
85 | @extend .reset-link;
86 | @include make-sm-column(2);
87 | display: block;
88 | text-align: center;
89 | font-size: $fs-h1;
90 | line-height: 1;
91 | @media (min-width: $screen-sm){
92 | text-align: right;
93 | }
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_header.scss:
--------------------------------------------------------------------------------
1 | .header {
2 | $height: $header-height;
3 | $height-bp: $header-height-breakpoint;
4 | $gutter: $gutter;
5 |
6 | display: flex;
7 | background-color: $background-secondary;
8 | min-height: $height-bp;
9 | border-bottom: 1px solid $primary-light;
10 | position: fixed;
11 | top: 0;
12 | width: 100%;
13 | z-index: 10;
14 |
15 | @media (min-width: $grid-breakpoint){
16 | min-height: $height;
17 | body:not(.fixed) &{
18 | position: static;
19 | }
20 | }
21 |
22 | &__container {
23 | @include container-fixed;
24 | display: flex;
25 | justify-content: center;
26 | align-items: center;
27 | }
28 |
29 | &__logo {
30 | height: $height - $gutter;
31 | flex: 1;
32 | text-align: center;
33 | padding-top: .5rem;
34 | padding-bottom: .5rem;
35 | @media (min-width: $grid-breakpoint){
36 | flex: initial;
37 | margin-right: $gutter;
38 | padding-top: 0;
39 | padding-bottom: 0;
40 | }
41 |
42 | img, svg {
43 | height: 100%;
44 | width: 13rem;
45 | }
46 | }
47 |
48 | &__nav {
49 | flex: 1;
50 | display: flex;
51 | flex-wrap: nowrap;
52 | align-items: center;
53 | min-width: 400px;
54 | @media (max-width: $grid-breakpoint - 1){
55 | display: none;
56 | }
57 |
58 | > *:not(:last-child) {
59 | margin-right: $gutter;
60 | }
61 | }
62 |
63 | &__actions {
64 | text-align: right;
65 | display: flex;
66 | align-items: center;
67 |
68 | > *:not(:last-child) {
69 | margin-right: $gutter/2;
70 | }
71 |
72 | > *:not(.header__user-info){
73 | @media (max-width: $grid-breakpoint - 1){
74 | display: none;
75 | }
76 | }
77 |
78 | input.search {
79 | max-width: 20rem;
80 | min-width: 10rem;
81 | }
82 | }
83 |
84 | &__user-info{
85 | $size: 3.2rem;
86 |
87 | min-width: 5rem;
88 |
89 | img{
90 | height: $size;
91 | width: $size;
92 | border-radius: 50%;
93 | background-color: $secondary;
94 | vertical-align: middle;
95 | }
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_hero.scss:
--------------------------------------------------------------------------------
1 | .hero {
2 | height: calc(100vh - 20rem); //header + paddings
3 | display: table;
4 | width: 100%;
5 | text-align: center;
6 | position: relative;
7 | @extend .container;
8 |
9 | .hero__content {
10 | display: table-cell;
11 | vertical-align: middle;
12 | }
13 |
14 | .hero__image {
15 | height: 90px;
16 | width: auto;
17 | @include margin-bottom(50px);
18 |
19 | svg {
20 | opacity: .2;
21 | }
22 | }
23 |
24 | .hero__button {
25 | margin-top: 2em;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_main-content.scss:
--------------------------------------------------------------------------------
1 | .main-content {
2 | $padding: 3rem;
3 |
4 | position: relative;
5 | padding-top: $padding;
6 | padding-bottom: $padding;
7 |
8 | @media (min-width: $grid-breakpoint){
9 | padding-top: $padding;
10 | }
11 |
12 | &__container {
13 | @extend .container;
14 | }
15 |
16 | &__header {
17 | text-align: center;
18 |
19 | .marsman-template-negative{
20 | width: 110px;
21 | height: 38px;
22 | margin-bottom: 1.5em;
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_modals.scss:
--------------------------------------------------------------------------------
1 | $zindex-modal-background: 1040 !default;
2 | $zindex-modal: 1050 !default;
3 |
4 | $modal-backdrop-bg: black;
5 | $modal-backdrop-opacity: .4;
6 |
7 | $modal-lg: 900px;
8 | $modal-md: 600px;
9 | $modal-sm: 400px;
10 |
11 | @keyframes modal-in {
12 | 0% {
13 | transform: translate(0, -25%);
14 | opacity: 0;
15 | }
16 | 100% {
17 | transform: translate(0, 0);
18 | opacity: 1;
19 | }
20 | }
21 |
22 | .modal-open {
23 | overflow: hidden;
24 | }
25 |
26 | .modal {
27 | display: none;
28 | overflow: hidden;
29 | position: fixed;
30 | top: 0;
31 | right: 0;
32 | bottom: 0;
33 | left: 0;
34 | z-index: $zindex-modal;
35 | -webkit-overflow-scrolling: touch;
36 |
37 | // Prevent Chrome on Windows from adding a focus outline. For details, see
38 | // https://github.com/twbs/bootstrap/pull/10951.
39 | outline: 0;
40 |
41 | &.fade .modal-dialog {
42 | transform: translate(0, -25%);
43 | opacity: 0;
44 | transition: transform 0.3s ease-out, opacity 0.3s ease-out;
45 | }
46 | &.in .modal-dialog {
47 | animation: modal-in .5s;
48 | animation-fill-mode: forwards;
49 | }
50 | }
51 |
52 | .modal-open .modal.in {
53 | overflow-x: hidden;
54 | overflow-y: auto;
55 | display: flex !important;
56 | align-items: center;
57 | flex-direction: column;
58 | justify-content: center;
59 | -ms-flex-pack: center; //Center horizontaly ie
60 | }
61 |
62 | .modal-dialog {
63 | position: relative;
64 | width: auto;
65 | margin: 10px;
66 | max-width: 100%;
67 | max-height: 100%;
68 | height: auto;
69 | margin: 0;
70 | padding: $gutter/2 $gutter/2 0;
71 |
72 | > * {
73 | box-shadow: 0 1px 10px rgba(black, .6);
74 | margin-bottom: $gutter;
75 | }
76 | }
77 |
78 | .modal-backdrop {
79 | position: fixed;
80 | top: 0;
81 | right: 0;
82 | bottom: 0;
83 | left: 0;
84 | z-index: $zindex-modal-background;
85 | background-color: $modal-backdrop-bg;
86 | transition: opacity .1s ease-out;
87 |
88 | &.fade {
89 | opacity: 0;
90 | }
91 |
92 | &.in {
93 | opacity: $modal-backdrop-opacity;
94 | }
95 | }
96 |
97 | // Measure scrollbar width for padding body during modal show/hide
98 | .modal-scrollbar-measure {
99 | position: absolute;
100 | top: -9999px;
101 | width: 50px;
102 | height: 50px;
103 | overflow: scroll;
104 | }
105 |
106 | // Scale up the modal
107 | @media (min-width: $screen-sm) {
108 | // Automatically set modal's width for larger viewports
109 | .modal-dialog {
110 | width: $modal-md;
111 | margin: 30px auto;
112 | }
113 | .modal-content {
114 | box-shadow: 0 16px 33px rgba(0, 0, 0, 0.28);
115 | }
116 |
117 | // Modal sizes
118 | .modal-sm {
119 | width: $modal-sm;
120 | }
121 | }
122 |
123 | @media (min-width: $screen-md) {
124 | .modal-lg {
125 | width: $modal-lg;
126 | }
127 | }
128 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_nav-inline.scss:
--------------------------------------------------------------------------------
1 | .nav-inline {
2 | $padding: .5em;
3 | $line-width: calc(100% - #{$padding * 2});
4 |
5 | @extend .list-reset;
6 | @extend .list-inline;
7 | margin-bottom: 0;
8 |
9 | a {
10 | padding: $padding;
11 | display: inline-block;
12 | position: relative;
13 | color: inherit;
14 | text-decoration: none;
15 |
16 | &::after {
17 | content: '';
18 | position: absolute;
19 | bottom: .2em;
20 | left: 50%;
21 | transform: translateX(-50%);
22 | width: 0;
23 | height: 1px;
24 | background-color: currentColor;
25 | transition: all .2s ease-out;
26 | }
27 |
28 | &:hover::after {
29 | width: $line-width;
30 | }
31 | }
32 | .active {
33 | color: $primary;
34 | a::after {
35 | width: $line-width;
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_nav-pills.scss:
--------------------------------------------------------------------------------
1 | .nav-pills {
2 | margin-bottom: 0;
3 | padding-left: 0;
4 | list-style: none;
5 | @include make-column(12);
6 | @include make-row;
7 | padding-bottom: 2rem;
8 |
9 | > li {
10 | float: left;
11 | position: relative;
12 | display: block;
13 |
14 | > a {
15 | @extend .btn-primary-light;
16 | display: inline;
17 | }
18 | + li {
19 | margin-left: .5rem;
20 | }
21 |
22 | &.active > a {
23 | &,
24 | &:hover,
25 | &:focus {
26 | color: white;
27 | background-color: $primary;
28 | }
29 | }
30 |
31 | &.disabled > a {
32 | color: black;
33 |
34 | &:hover,
35 | &:focus {
36 | color: $primary-light;
37 | text-decoration: none;
38 | background-color: transparent;
39 | cursor: not-allowed;
40 | }
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_nav-responsive.scss:
--------------------------------------------------------------------------------
1 | .nav-responsive {
2 | $bkg: $secondary;
3 | $width: $nav-responsive-width;
4 |
5 | height: 100vh;
6 | width: $width;
7 | position: absolute;
8 | left: -$width;
9 | background: $bkg;
10 |
11 | &__header{
12 | display: flex;
13 | display: flex;
14 | justify-content: center;
15 | align-items: center;
16 | padding: 1rem;
17 | min-height: $header-height-breakpoint;
18 | border-bottom: 1px solid rgba($primary,.2);
19 | }
20 |
21 | .pills{
22 | background-color: transparent;
23 | border-radius: 0;
24 | border: 0;
25 |
26 | &__link {
27 | border: 0;
28 | &.active,
29 | &:hover{
30 | color: white;
31 | }
32 | &::before{
33 | left: -.3em;
34 | width: .3em;
35 | }
36 | }
37 |
38 | > *:nth-child(even) {
39 | background-color: rgba(white, .05);
40 | }
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_pagination.scss:
--------------------------------------------------------------------------------
1 | .pagination {
2 | $color: $font-color;
3 | $border-color: $background-primary;
4 | $hover-bg: $primary;
5 | $hover-color: white;
6 | $active-bg: $primary-light;
7 | $active-color: white;
8 |
9 | display: inline-block;
10 | padding-left: 0;
11 | border-radius: $border-radius;
12 | background-color: $background-secondary;
13 |
14 | > li {
15 | display: inline; // Remove list-style and block-level defaults
16 | a{
17 | @extend .reset-link;
18 | position: relative;
19 | float: left; // Collapse white-space
20 | padding: .5em 1em;
21 | color: $color;
22 | line-height: 1.2;
23 | text-decoration: none;
24 | border: 1px solid $border-color;
25 | transition: all .2s ease-out;
26 | margin-left: -1px;
27 |
28 | &:hover,
29 | &:focus {
30 | background-color: $hover-bg;
31 | color: $hover-color;
32 | }
33 |
34 | &.is-active{
35 | background-color: $active-bg;
36 | color: $active-color;
37 | &:hover, &:focus{
38 | background-color: $hover-bg;
39 | color: $hover-color;
40 | }
41 | }
42 |
43 | &.is-disabled{
44 | opacity: .5;
45 | }
46 | }
47 |
48 | &:first-child a {
49 | margin-left: 0;
50 | border-top-left-radius: $border-radius;
51 | border-bottom-left-radius: $border-radius;
52 | }
53 |
54 | &:last-child a {
55 | border-top-right-radius: $border-radius;
56 | border-bottom-right-radius: $border-radius;
57 | }
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_pills.scss:
--------------------------------------------------------------------------------
1 |
2 |
3 | %pills-state{
4 | background-repeat: no-repeat;
5 | background-size: 1em;
6 | background-position: calc(100% - 1em) center;
7 | padding-right: 2.9em;
8 | }
9 |
10 | .pills {
11 | $padding: 1em 2em;
12 | $border: 1px solid $border-color;
13 | $bg: white;
14 | $active: $primary;
15 |
16 | margin: 0;
17 | padding: 0;
18 | list-style-type: none;
19 | border-radius: $border-radius;
20 | overflow: hidden;
21 | border: $border;
22 | background-color: $bg;
23 |
24 | a {
25 | @extend .reset-link;
26 | }
27 |
28 | &__item {
29 | display: block;
30 | margin: 0;
31 | }
32 |
33 | &__link {
34 | display: block;
35 | padding: $padding;
36 | border-bottom: $border;
37 | position: relative;
38 | transition: color .4s ease-out;
39 |
40 | &::before {
41 | content: "";
42 | position: absolute;
43 | top: 0;
44 | bottom: 0;
45 | left: -.5em;
46 | width: .5em;
47 | transition: left .2s ease-out;
48 | background-color: transparent;
49 | }
50 |
51 | .pills__item:last-child & {
52 | border-bottom: 0;
53 | }
54 |
55 | &.active,
56 | &:hover,
57 | &:focus {
58 | outline: 0;
59 |
60 | &::before{
61 | left: 0;
62 | background-color: currentColor;
63 | }
64 | }
65 |
66 | &.disabled{
67 | opacity: .2;
68 | cursor: not-allowed;
69 | //pointers-events: none;
70 | }
71 |
72 | &.active {
73 | color: $active;
74 | &::before{
75 | left: 0;
76 | background-color: $active;
77 | }
78 | }
79 |
80 | &.success{
81 | @extend %pills-state;
82 | background-image: image-url("icon-success.svg");
83 | }
84 |
85 | &.warning{
86 | @extend %pills-state;
87 | background-image: image-url("icon-warning.svg");
88 | }
89 | }
90 |
91 | &--number {
92 | @extend .pills;
93 | counter-reset: section;
94 |
95 | .pills__link {
96 | position: relative;
97 | padding-left: 2.8em;
98 |
99 | &::after{
100 | width: 2em;
101 | font-weight: bold;
102 | text-align: right;
103 | content: counter(section)".";
104 | counter-increment: section;
105 | left: .3em;
106 | top: 1em;
107 | position: absolute;
108 | }
109 | }
110 | }
111 | }
112 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_popover.scss:
--------------------------------------------------------------------------------
1 | .popover {
2 | $max-width: 300px;
3 | $bg: lighten($warning, 36%);
4 | $color: $warning;
5 | $border-color: $warning;
6 | $border-radius: 6px;
7 | $title-bg: $warning;
8 | $title-color: white;
9 | $arrow-color: $bg;
10 | $arrow-width: 10px;
11 | $arrow-outer-width: ($arrow-width + 1);
12 | $arrow-outer-color: $warning;
13 |
14 | position: absolute;
15 | top: 0;
16 | left: 0;
17 | z-index: 9999;
18 | display: none;
19 | font-size: $fs-base;
20 | line-height: $line-height-base;
21 | max-width: $max-width;
22 | font-weight: normal;
23 | text-align: left;
24 | background-color: $bg;
25 | background-clip: padding-box;
26 | color: $color;
27 | border: 1px solid $border-color;
28 | border-radius: $border-radius;
29 | box-shadow: $shadow;
30 |
31 | // Overrides for proper insertion
32 | white-space: normal;
33 |
34 | // Offset the popover to account for the popover arrow
35 | &.top { margin-top: -$arrow-width; }
36 | &.right { margin-left: $arrow-width; }
37 | &.bottom { margin-top: $arrow-width; }
38 | &.left { margin-left: -$arrow-width; }
39 |
40 | &.html {
41 | $this--bg: white;
42 | $this--width: 10px;
43 | $this--outer-width: ($this--width + 1);
44 | $this--outer-color: $primary;
45 |
46 | @extend .popover;
47 | background-color: $this--bg;
48 | border: 1px solid $this--outer-color;
49 | color: $font-color;
50 |
51 | &.top > .arrow {
52 | left: 50%;
53 | margin-left: -$this--outer-width;
54 | border-bottom-width: 0;
55 | border-top-color: $this--outer-color;
56 | bottom: -$this--outer-width;
57 | &:after {
58 | content: " ";
59 | bottom: 1px;
60 | margin-left: -$this--width;
61 | border-bottom-width: 0;
62 | border-top-color: $this--bg;
63 | }
64 | }
65 | &.right > .arrow {
66 | top: 50%;
67 | left: -$this--outer-width;
68 | margin-top: -$this--outer-width;
69 | border-left-width: 0;
70 | border-right-color: $this--outer-color;
71 | &:after {
72 | content: " ";
73 | left: 1px;
74 | bottom: -$this--width;
75 | border-left-width: 0;
76 | border-right-color: $this--bg;
77 | }
78 | }
79 | &.bottom > .arrow {
80 | left: 50%;
81 | margin-left: -$this--outer-width;
82 | border-top-width: 0;
83 | border-bottom-color: $this--outer-color;
84 | top: -$this--outer-width;
85 | &:after {
86 | content: " ";
87 | top: 1px;
88 | margin-left: -$this--width;
89 | border-top-width: 0;
90 | border-bottom-color: $this--bg;
91 | }
92 | }
93 |
94 | &.left > .arrow {
95 | top: 50%;
96 | right: -$this--outer-width;
97 | margin-top: -$this--outer-width;
98 | border-right-width: 0;
99 | border-left-color: $this--outer-color;
100 | &:after {
101 | content: " ";
102 | right: 1px;
103 | border-right-width: 0;
104 | border-left-color: $this--bg;
105 | bottom: -$this--width;
106 | }
107 | }
108 | }
109 |
110 | &-title {
111 | margin: 0; // reset heading margin
112 | padding: .5em 1em;
113 | color: $title-bg;
114 | background-color: $title-bg;
115 | color: $title-color;
116 | }
117 |
118 | &-content {
119 | padding: .5em 1em;
120 | }
121 |
122 | &-icon {
123 | @extend .reset-link;
124 | @extend %icon;
125 | @extend .fa-question-circle;
126 | vertical-align: top;
127 | font-size: .9em;
128 | color: $warning;
129 | }
130 |
131 | // Arrows
132 | // .arrow is outer, .arrow:after is inner
133 | & > .arrow {
134 | &,
135 | &:after {
136 | position: absolute;
137 | display: block;
138 | width: 0;
139 | height: 0;
140 | border-color: transparent;
141 | border-style: solid;
142 | }
143 | }
144 |
145 | & > .arrow {
146 | border-width: $arrow-outer-width;
147 | }
148 |
149 | & > .arrow:after {
150 | border-width: $arrow-width;
151 | content: "";
152 | }
153 |
154 | //modifers
155 | &.top > .arrow {
156 | left: 50%;
157 | margin-left: -$arrow-outer-width;
158 | border-bottom-width: 0;
159 | border-top-color: $arrow-outer-color;
160 | bottom: -$arrow-outer-width;
161 | &:after {
162 | content: " ";
163 | bottom: 1px;
164 | margin-left: -$arrow-width;
165 | border-bottom-width: 0;
166 | border-top-color: $arrow-color;
167 | }
168 | }
169 | &.right > .arrow {
170 | top: 50%;
171 | left: -$arrow-outer-width;
172 | margin-top: -$arrow-outer-width;
173 | border-left-width: 0;
174 | border-right-color: $arrow-outer-color;
175 | &:after {
176 | content: " ";
177 | left: 1px;
178 | bottom: -$arrow-width;
179 | border-left-width: 0;
180 | border-right-color: $arrow-color;
181 | }
182 | }
183 | &.bottom > .arrow {
184 | left: 50%;
185 | margin-left: -$arrow-outer-width;
186 | border-top-width: 0;
187 | border-bottom-color: $arrow-outer-color;
188 | top: -$arrow-outer-width;
189 | &:after {
190 | content: " ";
191 | top: 1px;
192 | margin-left: -$arrow-width;
193 | border-top-width: 0;
194 | border-bottom-color: $arrow-color;
195 | }
196 | }
197 |
198 | &.left > .arrow {
199 | top: 50%;
200 | right: -$arrow-outer-width;
201 | margin-top: -$arrow-outer-width;
202 | border-right-width: 0;
203 | border-left-color: $arrow-outer-color;
204 | &:after {
205 | content: " ";
206 | right: 1px;
207 | border-right-width: 0;
208 | border-left-color: $arrow-color;
209 | bottom: -$arrow-width;
210 | }
211 | }
212 | }
213 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_progress-bar.scss:
--------------------------------------------------------------------------------
1 | $progress-bar-bg: $secondary-lighter !default;
2 | $progress-bar-border: rgba(#000, .05) !default;
3 | $progress-bar-border-radius: 4px !default;
4 | $progress-bar-color: $primary !default;
5 | $progress-bar-animation: fadeIn !default;
6 | $progress-bar-width: 100% !default;
7 | $progress-bar-max-width: false !default;
8 | $progress-bar-barbershop-color: '%23ffffff' !default;
9 | $progress-bar-barbershop-opacity: 0.2 !default;
10 |
11 | @keyframes progressBarBarber {
12 | 0% {
13 | background-position-x: -40px;
14 | }
15 | 100% {
16 | background-position-x: 0;
17 | }
18 | }
19 |
20 | .progress-bar {
21 | position: relative;
22 | overflow: hidden;
23 | animation: $progress-bar-animation .4s ease-out;
24 | @if $progress-bar-border {
25 | border: 1px solid $progress-bar-border;
26 | }
27 | background-color: $progress-bar-bg;
28 | color: $primary;
29 | height: 1em;
30 | margin: auto;
31 | @if $progress-bar-border-radius {
32 | border-radius: $progress-bar-border-radius;
33 | }
34 | width: $progress-bar-width;
35 | @if $progress-bar-max-width {
36 | max-width: $progress-bar-max-width;
37 | }
38 |
39 | &__loaded {
40 | background-color: currentColor;
41 | position: absolute;
42 | top:0;
43 | bottom: 0;
44 | left: 0;
45 | width: 0;
46 | transition: width .4s ease-out;
47 | background-image: url("data:image/svg+xml,%3Csvg width='40' height='40' viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='"+$progress-bar-barbershop-color+"' fill-opacity='"+$progress-bar-barbershop-opacity+"' fill-rule='evenodd'%3E%3Cpath d='M0 40L40 0H20L0 20M40 40V20L20 40'/%3E%3C/g%3E%3C/svg%3E");
48 | animation: progressBarBarber 1s linear infinite;
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_select2.scss:
--------------------------------------------------------------------------------
1 | $select2-padding: $components-padding;
2 | $select2-border: $input-border;
3 | $select2-radius: $border-radius;
4 | $select2-bg-color: white !default;
5 | $select2-margin: $input-margin;
6 | $select2-color-active: $primary;
7 | $select2-icon-padding: 2em;
8 | $select2-icon-color: $primary;
9 | $select2-dropdown-max-height: 32px * 7 + 14px;
10 | $select2-dropdown-border: 1px solid $primary;
11 | $select2-search-color: white;
12 | $select2-search-bg-color: lighten($primary, 20%);
13 | $select2-border-readonly: 1px solid #f8f8fa;
14 |
15 | .select2-hidden-accessible {
16 | border: 0 !important;
17 | clip: rect(0 0 0 0) !important;
18 | height: 1px !important;
19 | margin: -1px !important;
20 | overflow: hidden !important;
21 | padding: 0 !important;
22 | position: absolute !important;
23 | width: 1px !important;
24 | }
25 |
26 | .select2.disabled + .select2-container {
27 | @extend .disabled;
28 |
29 | .selection {
30 | box-shadow: none;
31 | }
32 | }
33 |
34 | .select2.readonly + .select2-container {
35 |
36 | .selection {
37 | box-shadow: none;
38 | border: $select2-border-readonly;
39 | }
40 | }
41 |
42 | .select2-container {
43 | @extend %form-item;
44 | width: auto;
45 | max-width: 100%;
46 | display: inline-block;
47 | position: relative;
48 | vertical-align: middle;
49 | background-color: transparent;
50 | padding: 0 !important;
51 | border: 0 !important;
52 |
53 | &--open {
54 | .modal-open & {
55 | z-index: 9999;
56 | }
57 | }
58 |
59 | &.select2 {
60 | width: 100% !important;
61 | }
62 |
63 | .selection {
64 | width: 100%;
65 | display: block;
66 | border: $select2-border;
67 | background-color: $select2-bg-color;
68 | border-radius: $select2-radius;
69 | position: relative;
70 | float: none;
71 | box-shadow: none;
72 | }
73 |
74 | &--open,
75 | &--focus {
76 | .selection {
77 | @include focus;
78 | }
79 |
80 | &.success {
81 | .selection {
82 | @include focus($success);
83 | }
84 | }
85 |
86 | &.warning {
87 | .selection {
88 | @include focus($warning);
89 | }
90 | }
91 | }
92 |
93 | .form-group.success &,
94 | &.success {
95 | .selection {
96 | border-color: $success;
97 | }
98 | }
99 |
100 | .form-group.warning &,
101 | &.warning {
102 | .selection {
103 | border-color: $warning;
104 | }
105 | }
106 | }
107 |
108 | .select2-selection {
109 | outline: 0;
110 | padding: $select2-padding;
111 | padding-right: $select2-icon-padding;
112 | display: block;
113 |
114 | &__arrow {
115 | position: absolute;
116 | top: 50%;
117 | color: $select2-icon-color;
118 | transform: translateY(-50%);
119 | right: 1em;
120 |
121 | b {
122 | @extend .fa;
123 | @extend .fa-caret-down;
124 | font-size: 1em;
125 | line-height: inherit;
126 | }
127 | }
128 |
129 | &__placeholder {
130 | color: $input-placeholder;
131 | }
132 |
133 | &__rendered {
134 | outline: 0 !important;
135 | @include ellipsis;
136 | display: block;
137 | }
138 |
139 | &__clear {
140 | cursor: pointer;
141 | float: left;
142 | margin-right: .5em;
143 | }
144 | }
145 |
146 | .select2-dropdown {
147 | box-sizing: border-box;
148 | display: block;
149 | position: absolute;
150 | margin-top: $select2-margin/2;
151 | margin-bottom: $select2-margin/2;
152 | border-radius: $select2-radius;
153 | z-index: 998;
154 | overflow: hidden;
155 | border: 1px solid $select2-color-active;
156 | background-color: white;
157 |
158 | &--above {
159 | margin-top: -$select2-margin/2;
160 | }
161 |
162 | ul {
163 | @extend .list-reset;
164 | max-height: $select2-dropdown-max-height;
165 | overflow-y: auto;
166 |
167 | li {
168 | cursor: pointer;
169 | padding: $select2-padding;
170 |
171 | &:last-of-type {
172 | margin-bottom: .5em;
173 | }
174 |
175 | &:first-of-type {
176 | margin-top: .5em;
177 | }
178 | }
179 | }
180 | }
181 |
182 | .select2-search {
183 | display: block;
184 |
185 | &--hide {
186 | display: none;
187 | }
188 |
189 | &__field {
190 | box-sizing: border-box !important;
191 | border: 0;
192 | width: 100%;
193 | padding: $select2-padding;
194 | margin: 0;
195 | background-color: $select2-search-bg-color;
196 | color: $select2-search-color;
197 | border-radius: 0;
198 | box-shadow: none;
199 |
200 | &:focus {
201 | box-shadow: none !important;
202 | }
203 | }
204 | }
205 |
206 | .select2-results {
207 | display: block;
208 |
209 | &__options {
210 | margin-bottom: 0;
211 | }
212 |
213 | &__option--highlighted {
214 | color: $select2-color-active;
215 | }
216 | }
217 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_separator.scss:
--------------------------------------------------------------------------------
1 | @mixin separator($color: $secondary-lighter) {
2 | overflow: hidden;
3 | text-align: center;
4 | color: $color;
5 | margin-bottom: 1.5em;
6 |
7 | &__text {
8 | display: inline-block;
9 | vertical-align: middle;
10 | max-width: 90%;
11 | margin: auto;
12 | }
13 |
14 | &:before,
15 | &:after{
16 | background-color: $color;
17 | content: "";
18 | display: inline-block;
19 | height: 1px;
20 | position: relative;
21 | vertical-align: middle;
22 | width: 50%;
23 | }
24 | &:after {
25 | left: 0.5em;
26 | margin-right: -50%;
27 | }
28 | &:before {
29 | right: 0.5em;
30 | margin-left: -50%;
31 | }
32 | }
33 |
34 | .separator {
35 | @include separator($secondary-lighter);
36 | }
37 |
38 | .separator--negative {
39 | @include separator(white);
40 | }
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_tooltip.scss:
--------------------------------------------------------------------------------
1 | .tooltip {
2 | font-size: 2.4rem;
3 | position: relative;
4 | transition: 0.3s;
5 | height: 0.85em;
6 | width: 0.85em;
7 | &::before {
8 | background-image: image-url('icon-tooltip.svg');
9 | background-repeat: no-repeat;
10 | content: '';
11 | position: absolute;
12 | top: 0;
13 | right: 0;
14 | bottom: 0;
15 | left: 0;
16 | }
17 |
18 | &-wrapper {
19 | @media (min-width: $screen-sm) {
20 | padding-right: 2em;
21 | position: relative;
22 | }
23 |
24 | .tooltip {
25 | position: absolute;
26 | top: .2em;
27 | right: .1em;
28 | @media (max-width: $screen-sm - 1) {
29 | display: none;
30 | }
31 | }
32 | }
33 |
34 | &-wrapper-mobile {
35 | position: relative;
36 | margin-bottom: 0.5em;
37 |
38 | label {
39 | display: inline !important;
40 | }
41 |
42 | .tooltip {
43 | display: inline-block;
44 | vertical-align: -.25rem;
45 | margin-left: 1rem;
46 | @media (min-width: $screen-sm) {
47 | display: none;
48 | }
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/source/stylesheets/blocks/_user-info.scss:
--------------------------------------------------------------------------------
1 | $user-info--margin: 1em;
2 |
3 | .user-info{
4 |
5 | &__item {
6 | display: inline-block;
7 | margin-right: $user-info--margin;
8 | }
9 |
10 | &__name {
11 | @extend .user-info__item;
12 | }
13 |
14 | &__logout {
15 | @extend .reset-link;
16 | @extend .user-info__item;
17 | @extend .fa;
18 | @extend .fa-power-off;
19 | color: $primary;
20 | }
21 | }
--------------------------------------------------------------------------------
/source/stylesheets/layouts/_home.scss:
--------------------------------------------------------------------------------
1 | body.home{
2 | .main-content {
3 | .marsman-template {
4 | padding-top: 1.5em;
5 | padding-bottom: 3em;
6 | width: 100%;
7 | height: auto;
8 | @media (min-width: $screen-sm){
9 | height: 200px;
10 | }
11 | }
12 | .list-pages{
13 | max-width: 800px;
14 | margin: auto;
15 | padding-bottom: 3em;
16 | }
17 | }
18 | }
--------------------------------------------------------------------------------
/source/stylesheets/layouts/_primary.scss:
--------------------------------------------------------------------------------
1 | body.primary{
2 | .wrapper{
3 | height: 100%;
4 | top: 0;
5 | }
6 |
7 | .main-content {
8 | color: white;
9 | background-repeat: repeat-x;
10 | background-color: $primary;
11 | background-image: linear-gradient(to bottom, $primary 30%,
12 | lighten($primary, 10%) 100%);
13 | }
14 |
15 | .box {
16 | box-shadow: 0 1.6rem 3.3rem rgba(black, .28);
17 | color: $font-color;
18 | }
19 |
20 | .container-xs{
21 | .box__content{
22 | max-width: 30rem;
23 | padding-left: 0;
24 | padding-right: 0;
25 | margin-left: auto;
26 | margin-right: auto;
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/source/stylesheets/layouts/_toolkit.scss:
--------------------------------------------------------------------------------
1 | body.toolkit{
2 | padding-top: 4rem;
3 | padding-bottom: 4rem;
4 |
5 | .toolkit{
6 | &__container{
7 | @extend .container;
8 | @media (min-width: $screen-sm){
9 | padding-left: $gutter;
10 | padding-right: $gutter;
11 | }
12 | }
13 |
14 | &__row{
15 | @media (min-width: $screen-sm ){
16 | @include make-row($gutter*2)
17 | }
18 | }
19 |
20 | &__item{
21 | margin-bottom: 4rem;
22 | @media (min-width: $screen-sm ){
23 | @include make-column(6, $gutter*2);
24 | }
25 | }
26 |
27 | &__block{
28 | margin-bottom: 4rem;
29 | }
30 |
31 | &__checkboxes {
32 | @extend .toolkit__block;
33 | }
34 |
35 | &__table{
36 | display: table;
37 | width: 100%;
38 | }
39 | &__cell{
40 | display: table-cell;
41 | text-align: center;
42 | &:first-of-type{
43 | text-align: left;
44 | }
45 | &:last-of-type{
46 | text-align: right;
47 | }
48 | }
49 | }
50 |
51 | .typography{
52 | &__container{
53 | display: block;
54 | clear: both;
55 | padding-left: $gutter/2;
56 | padding-right: $gutter/2;
57 | @media (min-width: 500px) and (max-width: $screen-sm - 1){
58 | clear: none;
59 | margin-left: 25%;
60 | padding-left: $gutter/2;
61 | }
62 | @media (min-width: $screen-sm){
63 | clear: none;
64 | margin-left: 25%;
65 | padding-left: $gutter/2;
66 | }
67 | }
68 |
69 | &__item{
70 | @include clearfix;
71 | @include ellipsis;
72 | padding-right: $gutter/2;
73 | text-align: right;
74 | color: $font-color-light;
75 | }
76 |
77 | &__title{
78 | color: $font-color;
79 | float: left;
80 | margin-right: .3em;
81 | }
82 |
83 | &__h1{
84 | @extend .typography__item;
85 | @extend .h1;
86 | }
87 |
88 | &__h2{
89 | @extend .typography__item;
90 | @extend .h2;
91 | }
92 |
93 | &__base{
94 | @extend .typography__item;
95 | }
96 |
97 | &__small{
98 | @extend .typography__item;
99 | @extend .small;
100 | }
101 |
102 | }
103 | }
--------------------------------------------------------------------------------
/source/stylesheets/plugins/_tippy.scss:
--------------------------------------------------------------------------------
1 | $tooltip--color: #eef2f2;
2 | $label--color: #333;
3 | $z-tooltip: 9;
4 |
5 | .tippy-touch {
6 | cursor: pointer !important;
7 | }
8 | .tippy-notransition {
9 | transition: none !important;
10 | }
11 | .tippy-popper {
12 | max-width: 350px;
13 | -webkit-perspective: 700px;
14 | perspective: 700px;
15 | z-index: $z-tooltip !important;
16 | outline: 0;
17 | transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1);
18 | pointer-events: none;
19 | line-height: 1.4;
20 | }
21 | .tippy-popper[data-html] {
22 | max-width: 96%;
23 | max-width: calc(100% - 20px);
24 | }
25 | .tippy-popper[x-placement^='top'] .tippy-backdrop {
26 | border-radius: 40% 40% 0 0;
27 | }
28 | .tippy-popper[x-placement^='top'] .tippy-roundarrow {
29 | bottom: -8px;
30 | -webkit-transform-origin: 50% 0;
31 | transform-origin: 50% 0;
32 | }
33 | .tippy-popper[x-placement^='top'] .tippy-roundarrow svg {
34 | position: absolute;
35 | left: 0;
36 | -webkit-transform: rotate(180deg);
37 | transform: rotate(180deg);
38 | }
39 | .tippy-popper[x-placement^='top'] .tippy-arrow {
40 | border-top: 7px solid $tooltip--color;
41 | border-right: 7px solid transparent;
42 | border-left: 7px solid transparent;
43 | bottom: -7px;
44 | margin: 0 6px;
45 | -webkit-transform-origin: 50% 0;
46 | transform-origin: 50% 0;
47 | }
48 | .tippy-popper[x-placement^='top'] .tippy-backdrop {
49 | -webkit-transform-origin: 0 90%;
50 | transform-origin: 0 90%;
51 | }
52 | .tippy-popper[x-placement^='top'] .tippy-backdrop[data-state='visible'] {
53 | -webkit-transform: scale(6) translate(-50%, 25%);
54 | transform: scale(6) translate(-50%, 25%);
55 | opacity: 1;
56 | }
57 | .tippy-popper[x-placement^='top'] .tippy-backdrop[data-state='hidden'] {
58 | -webkit-transform: scale(1) translate(-50%, 25%);
59 | transform: scale(1) translate(-50%, 25%);
60 | opacity: 0;
61 | }
62 | .tippy-popper[x-placement^='top']
63 | [data-animation='shift-toward'][data-state='visible'] {
64 | opacity: 1;
65 | -webkit-transform: translateY(-10px);
66 | transform: translateY(-10px);
67 | }
68 | .tippy-popper[x-placement^='top']
69 | [data-animation='shift-toward'][data-state='hidden'] {
70 | opacity: 0;
71 | -webkit-transform: translateY(-20px);
72 | transform: translateY(-20px);
73 | }
74 | .tippy-popper[x-placement^='top'] [data-animation='perspective'] {
75 | -webkit-transform-origin: bottom;
76 | transform-origin: bottom;
77 | }
78 | .tippy-popper[x-placement^='top']
79 | [data-animation='perspective'][data-state='visible'] {
80 | opacity: 1;
81 | -webkit-transform: translateY(-10px) rotateX(0);
82 | transform: translateY(-10px) rotateX(0);
83 | }
84 | .tippy-popper[x-placement^='top']
85 | [data-animation='perspective'][data-state='hidden'] {
86 | opacity: 0;
87 | -webkit-transform: translateY(0) rotateX(90deg);
88 | transform: translateY(0) rotateX(90deg);
89 | }
90 | .tippy-popper[x-placement^='top']
91 | [data-animation='fade'][data-state='visible'] {
92 | opacity: 1;
93 | -webkit-transform: translateY(-10px);
94 | transform: translateY(-10px);
95 | }
96 | .tippy-popper[x-placement^='top'] [data-animation='fade'][data-state='hidden'] {
97 | opacity: 0;
98 | -webkit-transform: translateY(-10px);
99 | transform: translateY(-10px);
100 | }
101 | .tippy-popper[x-placement^='top']
102 | [data-animation='shift-away'][data-state='visible'] {
103 | opacity: 1;
104 | -webkit-transform: translateY(-10px);
105 | transform: translateY(-10px);
106 | }
107 | .tippy-popper[x-placement^='top']
108 | [data-animation='shift-away'][data-state='hidden'] {
109 | opacity: 0;
110 | -webkit-transform: translateY(0);
111 | transform: translateY(0);
112 | }
113 | .tippy-popper[x-placement^='top']
114 | [data-animation='scale'][data-state='visible'] {
115 | opacity: 1;
116 | -webkit-transform: translateY(-10px) scale(1);
117 | transform: translateY(-10px) scale(1);
118 | }
119 | .tippy-popper[x-placement^='top']
120 | [data-animation='scale'][data-state='hidden'] {
121 | opacity: 0;
122 | -webkit-transform: translateY(0) scale(0);
123 | transform: translateY(0) scale(0);
124 | }
125 | .tippy-popper[x-placement^='bottom'] .tippy-backdrop {
126 | border-radius: 0 0 30% 30%;
127 | }
128 | .tippy-popper[x-placement^='bottom'] .tippy-roundarrow {
129 | top: -8px;
130 | -webkit-transform-origin: 50% 100%;
131 | transform-origin: 50% 100%;
132 | }
133 | .tippy-popper[x-placement^='bottom'] .tippy-roundarrow svg {
134 | position: absolute;
135 | left: 0;
136 | -webkit-transform: rotate(0);
137 | transform: rotate(0);
138 | }
139 | .tippy-popper[x-placement^='bottom'] .tippy-arrow {
140 | border-bottom: 7px solid $tooltip--color;
141 | border-right: 7px solid transparent;
142 | border-left: 7px solid transparent;
143 | top: -7px;
144 | margin: 0 6px;
145 | -webkit-transform-origin: 50% 100%;
146 | transform-origin: 50% 100%;
147 | }
148 | .tippy-popper[x-placement^='bottom'] .tippy-backdrop {
149 | -webkit-transform-origin: 0 -90%;
150 | transform-origin: 0 -90%;
151 | }
152 | .tippy-popper[x-placement^='bottom'] .tippy-backdrop[data-state='visible'] {
153 | -webkit-transform: scale(6) translate(-50%, -125%);
154 | transform: scale(6) translate(-50%, -125%);
155 | opacity: 1;
156 | }
157 | .tippy-popper[x-placement^='bottom'] .tippy-backdrop[data-state='hidden'] {
158 | -webkit-transform: scale(1) translate(-50%, -125%);
159 | transform: scale(1) translate(-50%, -125%);
160 | opacity: 0;
161 | }
162 | .tippy-popper[x-placement^='bottom']
163 | [data-animation='shift-toward'][data-state='visible'] {
164 | opacity: 1;
165 | -webkit-transform: translateY(10px);
166 | transform: translateY(10px);
167 | }
168 | .tippy-popper[x-placement^='bottom']
169 | [data-animation='shift-toward'][data-state='hidden'] {
170 | opacity: 0;
171 | -webkit-transform: translateY(20px);
172 | transform: translateY(20px);
173 | }
174 | .tippy-popper[x-placement^='bottom'] [data-animation='perspective'] {
175 | -webkit-transform-origin: top;
176 | transform-origin: top;
177 | }
178 | .tippy-popper[x-placement^='bottom']
179 | [data-animation='perspective'][data-state='visible'] {
180 | opacity: 1;
181 | -webkit-transform: translateY(10px) rotateX(0);
182 | transform: translateY(10px) rotateX(0);
183 | }
184 | .tippy-popper[x-placement^='bottom']
185 | [data-animation='perspective'][data-state='hidden'] {
186 | opacity: 0;
187 | -webkit-transform: translateY(0) rotateX(-90deg);
188 | transform: translateY(0) rotateX(-90deg);
189 | }
190 | .tippy-popper[x-placement^='bottom']
191 | [data-animation='fade'][data-state='visible'] {
192 | opacity: 1;
193 | -webkit-transform: translateY(10px);
194 | transform: translateY(10px);
195 | }
196 | .tippy-popper[x-placement^='bottom']
197 | [data-animation='fade'][data-state='hidden'] {
198 | opacity: 0;
199 | -webkit-transform: translateY(10px);
200 | transform: translateY(10px);
201 | }
202 | .tippy-popper[x-placement^='bottom']
203 | [data-animation='shift-away'][data-state='visible'] {
204 | opacity: 1;
205 | -webkit-transform: translateY(10px);
206 | transform: translateY(10px);
207 | }
208 | .tippy-popper[x-placement^='bottom']
209 | [data-animation='shift-away'][data-state='hidden'] {
210 | opacity: 0;
211 | -webkit-transform: translateY(0);
212 | transform: translateY(0);
213 | }
214 | .tippy-popper[x-placement^='bottom']
215 | [data-animation='scale'][data-state='visible'] {
216 | opacity: 1;
217 | -webkit-transform: translateY(10px) scale(1);
218 | transform: translateY(10px) scale(1);
219 | }
220 | .tippy-popper[x-placement^='bottom']
221 | [data-animation='scale'][data-state='hidden'] {
222 | opacity: 0;
223 | -webkit-transform: translateY(0) scale(0);
224 | transform: translateY(0) scale(0);
225 | }
226 | .tippy-popper[x-placement^='left'] .tippy-backdrop {
227 | border-radius: 50% 0 0 50%;
228 | }
229 | .tippy-popper[x-placement^='left'] .tippy-roundarrow {
230 | right: -16px;
231 | -webkit-transform-origin: 33.33333333% 50%;
232 | transform-origin: 33.33333333% 50%;
233 | }
234 | .tippy-popper[x-placement^='left'] .tippy-roundarrow svg {
235 | position: absolute;
236 | left: 0;
237 | -webkit-transform: rotate(90deg);
238 | transform: rotate(90deg);
239 | }
240 | .tippy-popper[x-placement^='left'] .tippy-arrow {
241 | border-left: 7px solid $tooltip--color;
242 | border-top: 7px solid transparent;
243 | border-bottom: 7px solid transparent;
244 | right: -7px;
245 | margin: 3px 0;
246 | -webkit-transform-origin: 0 50%;
247 | transform-origin: 0 50%;
248 | }
249 | .tippy-popper[x-placement^='left'] .tippy-backdrop {
250 | -webkit-transform-origin: 100% 0;
251 | transform-origin: 100% 0;
252 | }
253 | .tippy-popper[x-placement^='left'] .tippy-backdrop[data-state='visible'] {
254 | -webkit-transform: scale(6) translate(40%, -50%);
255 | transform: scale(6) translate(40%, -50%);
256 | opacity: 1;
257 | }
258 | .tippy-popper[x-placement^='left'] .tippy-backdrop[data-state='hidden'] {
259 | -webkit-transform: scale(1.5) translate(40%, -50%);
260 | transform: scale(1.5) translate(40%, -50%);
261 | opacity: 0;
262 | }
263 | .tippy-popper[x-placement^='left']
264 | [data-animation='shift-toward'][data-state='visible'] {
265 | opacity: 1;
266 | -webkit-transform: translateX(-10px);
267 | transform: translateX(-10px);
268 | }
269 | .tippy-popper[x-placement^='left']
270 | [data-animation='shift-toward'][data-state='hidden'] {
271 | opacity: 0;
272 | -webkit-transform: translateX(-20px);
273 | transform: translateX(-20px);
274 | }
275 | .tippy-popper[x-placement^='left'] [data-animation='perspective'] {
276 | -webkit-transform-origin: right;
277 | transform-origin: right;
278 | }
279 | .tippy-popper[x-placement^='left']
280 | [data-animation='perspective'][data-state='visible'] {
281 | opacity: 1;
282 | -webkit-transform: translateX(-10px) rotateY(0);
283 | transform: translateX(-10px) rotateY(0);
284 | }
285 | .tippy-popper[x-placement^='left']
286 | [data-animation='perspective'][data-state='hidden'] {
287 | opacity: 0;
288 | -webkit-transform: translateX(0) rotateY(-90deg);
289 | transform: translateX(0) rotateY(-90deg);
290 | }
291 | .tippy-popper[x-placement^='left']
292 | [data-animation='fade'][data-state='visible'] {
293 | opacity: 1;
294 | -webkit-transform: translateX(-10px);
295 | transform: translateX(-10px);
296 | }
297 | .tippy-popper[x-placement^='left']
298 | [data-animation='fade'][data-state='hidden'] {
299 | opacity: 0;
300 | -webkit-transform: translateX(-10px);
301 | transform: translateX(-10px);
302 | }
303 | .tippy-popper[x-placement^='left']
304 | [data-animation='shift-away'][data-state='visible'] {
305 | opacity: 1;
306 | -webkit-transform: translateX(-10px);
307 | transform: translateX(-10px);
308 | }
309 | .tippy-popper[x-placement^='left']
310 | [data-animation='shift-away'][data-state='hidden'] {
311 | opacity: 0;
312 | -webkit-transform: translateX(0);
313 | transform: translateX(0);
314 | }
315 | .tippy-popper[x-placement^='left']
316 | [data-animation='scale'][data-state='visible'] {
317 | opacity: 1;
318 | -webkit-transform: translateX(-10px) scale(1);
319 | transform: translateX(-10px) scale(1);
320 | }
321 | .tippy-popper[x-placement^='left']
322 | [data-animation='scale'][data-state='hidden'] {
323 | opacity: 0;
324 | -webkit-transform: translateX(0) scale(0);
325 | transform: translateX(0) scale(0);
326 | }
327 | .tippy-popper[x-placement^='right'] .tippy-backdrop {
328 | border-radius: 0 50% 50% 0;
329 | }
330 | .tippy-popper[x-placement^='right'] .tippy-roundarrow {
331 | left: -16px;
332 | -webkit-transform-origin: 66.66666666% 50%;
333 | transform-origin: 66.66666666% 50%;
334 | }
335 | .tippy-popper[x-placement^='right'] .tippy-roundarrow svg {
336 | position: absolute;
337 | left: 0;
338 | -webkit-transform: rotate(-90deg);
339 | transform: rotate(-90deg);
340 | }
341 | .tippy-popper[x-placement^='right'] .tippy-arrow {
342 | border-right: 7px solid $tooltip--color;
343 | border-top: 6px solid transparent;
344 | border-bottom: 6px solid transparent;
345 | left: -7px;
346 | margin: 3px 0;
347 | -webkit-transform-origin: 100% 50%;
348 | transform-origin: 100% 50%;
349 | }
350 | .tippy-popper[x-placement^='right'] .tippy-backdrop {
351 | -webkit-transform-origin: -100% 0;
352 | transform-origin: -100% 0;
353 | }
354 | .tippy-popper[x-placement^='right'] .tippy-backdrop[data-state='visible'] {
355 | -webkit-transform: scale(6) translate(-140%, -50%);
356 | transform: scale(6) translate(-140%, -50%);
357 | opacity: 1;
358 | }
359 | .tippy-popper[x-placement^='right'] .tippy-backdrop[data-state='hidden'] {
360 | -webkit-transform: scale(1.5) translate(-140%, -50%);
361 | transform: scale(1.5) translate(-140%, -50%);
362 | opacity: 0;
363 | }
364 | .tippy-popper[x-placement^='right']
365 | [data-animation='shift-toward'][data-state='visible'] {
366 | opacity: 1;
367 | -webkit-transform: translateX(10px);
368 | transform: translateX(10px);
369 | }
370 | .tippy-popper[x-placement^='right']
371 | [data-animation='shift-toward'][data-state='hidden'] {
372 | opacity: 0;
373 | -webkit-transform: translateX(20px);
374 | transform: translateX(20px);
375 | }
376 | .tippy-popper[x-placement^='right'] [data-animation='perspective'] {
377 | -webkit-transform-origin: left;
378 | transform-origin: left;
379 | }
380 | .tippy-popper[x-placement^='right']
381 | [data-animation='perspective'][data-state='visible'] {
382 | opacity: 1;
383 | -webkit-transform: translateX(10px) rotateY(0);
384 | transform: translateX(10px) rotateY(0);
385 | }
386 | .tippy-popper[x-placement^='right']
387 | [data-animation='perspective'][data-state='hidden'] {
388 | opacity: 0;
389 | -webkit-transform: translateX(0) rotateY(90deg);
390 | transform: translateX(0) rotateY(90deg);
391 | }
392 | .tippy-popper[x-placement^='right']
393 | [data-animation='fade'][data-state='visible'] {
394 | opacity: 1;
395 | -webkit-transform: translateX(10px);
396 | transform: translateX(10px);
397 | }
398 | .tippy-popper[x-placement^='right']
399 | [data-animation='fade'][data-state='hidden'] {
400 | opacity: 0;
401 | -webkit-transform: translateX(10px);
402 | transform: translateX(10px);
403 | }
404 | .tippy-popper[x-placement^='right']
405 | [data-animation='shift-away'][data-state='visible'] {
406 | opacity: 1;
407 | -webkit-transform: translateX(10px);
408 | transform: translateX(10px);
409 | }
410 | .tippy-popper[x-placement^='right']
411 | [data-animation='shift-away'][data-state='hidden'] {
412 | opacity: 0;
413 | -webkit-transform: translateX(0);
414 | transform: translateX(0);
415 | }
416 | .tippy-popper[x-placement^='right']
417 | [data-animation='scale'][data-state='visible'] {
418 | opacity: 1;
419 | -webkit-transform: translateX(10px) scale(1);
420 | transform: translateX(10px) scale(1);
421 | }
422 | .tippy-popper[x-placement^='right']
423 | [data-animation='scale'][data-state='hidden'] {
424 | opacity: 0;
425 | -webkit-transform: translateX(0) scale(0);
426 | transform: translateX(0) scale(0);
427 | }
428 | .tippy-tooltip {
429 | position: relative;
430 | background: $tooltip--color;
431 | color: $label--color;
432 | font-size: 1.1rem;
433 | border-radius: 3px;
434 | padding: 0.5rem 1rem;
435 | will-change: transform;
436 | @media (min-width: $grid-breakpoint) {
437 | width: 200px;
438 | }
439 | }
440 | // .tippy-tooltip[data-size='small'] {
441 | // padding: 0.2rem 0.4rem;
442 | // font-size: 0.75rem;
443 | // }
444 | // .tippy-tooltip[data-size='large'] {
445 | // padding: 0.4rem 0.8rem;
446 | // font-size: 1rem;
447 | // }
448 | .tippy-tooltip[data-animatefill] {
449 | overflow: hidden;
450 | background-color: transparent;
451 | }
452 | .tippy-tooltip[data-animatefill] .tippy-content {
453 | transition: -webkit-clip-path cubic-bezier(0.46, 0.1, 0.52, 0.98);
454 | transition: clip-path cubic-bezier(0.46, 0.1, 0.52, 0.98);
455 | transition: clip-path cubic-bezier(0.46, 0.1, 0.52, 0.98),
456 | -webkit-clip-path cubic-bezier(0.46, 0.1, 0.52, 0.98);
457 | }
458 | .tippy-tooltip[data-interactive],
459 | .tippy-tooltip[data-interactive] path {
460 | pointer-events: auto;
461 | }
462 | .tippy-tooltip[data-inertia][data-state='visible'] {
463 | transition-timing-function: cubic-bezier(0.53, 2, 0.36, 0.85);
464 | }
465 | .tippy-tooltip[data-inertia][data-state='hidden'] {
466 | transition-timing-function: ease;
467 | }
468 | .tippy-arrow,
469 | .tippy-roundarrow {
470 | position: absolute;
471 | width: 0;
472 | height: 0;
473 | }
474 | .tippy-roundarrow {
475 | width: 24px;
476 | height: 8px;
477 | fill: $tooltip--color;
478 | pointer-events: none;
479 | }
480 | .tippy-backdrop {
481 | position: absolute;
482 | will-change: transform;
483 | background: $tooltip--color;
484 | border-radius: 50%;
485 | width: 26%;
486 | left: 50%;
487 | top: 50%;
488 | z-index: -1;
489 | transition: all cubic-bezier(0.46, 0.1, 0.52, 0.98);
490 | -webkit-backface-visibility: hidden;
491 | backface-visibility: hidden;
492 | }
493 | .tippy-backdrop:after {
494 | content: '';
495 | float: left;
496 | padding-top: 100%;
497 | }
498 | body:not(.tippy-touch)
499 | .tippy-tooltip[data-animatefill][data-state='visible']
500 | .tippy-content {
501 | -webkit-clip-path: ellipse(100% 100% at 50% 50%);
502 | clip-path: ellipse(100% 100% at 50% 50%);
503 | }
504 | body:not(.tippy-touch)
505 | .tippy-tooltip[data-animatefill][data-state='hidden']
506 | .tippy-content {
507 | -webkit-clip-path: ellipse(5% 50% at 50% 50%);
508 | clip-path: ellipse(5% 50% at 50% 50%);
509 | }
510 | body:not(.tippy-touch)
511 | .tippy-popper[x-placement='right']
512 | .tippy-tooltip[data-animatefill][data-state='visible']
513 | .tippy-content {
514 | -webkit-clip-path: ellipse(135% 100% at 0 50%);
515 | clip-path: ellipse(135% 100% at 0 50%);
516 | }
517 | body:not(.tippy-touch)
518 | .tippy-popper[x-placement='right']
519 | .tippy-tooltip[data-animatefill][data-state='hidden']
520 | .tippy-content {
521 | -webkit-clip-path: ellipse(40% 100% at 0 50%);
522 | clip-path: ellipse(40% 100% at 0 50%);
523 | }
524 | body:not(.tippy-touch)
525 | .tippy-popper[x-placement='left']
526 | .tippy-tooltip[data-animatefill][data-state='visible']
527 | .tippy-content {
528 | -webkit-clip-path: ellipse(135% 100% at 100% 50%);
529 | clip-path: ellipse(135% 100% at 100% 50%);
530 | }
531 | body:not(.tippy-touch)
532 | .tippy-popper[x-placement='left']
533 | .tippy-tooltip[data-animatefill][data-state='hidden']
534 | .tippy-content {
535 | -webkit-clip-path: ellipse(40% 100% at 100% 50%);
536 | clip-path: ellipse(40% 100% at 100% 50%);
537 | }
538 | @media (max-width: 360px) {
539 | .tippy-popper {
540 | max-width: 96%;
541 | max-width: calc(100% - 20px);
542 | }
543 | }
544 |
--------------------------------------------------------------------------------
/source/stylesheets/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: [
3 | require('autoprefixer')
4 | ]
5 | };
6 |
--------------------------------------------------------------------------------
/source/stylesheets/utilities/_helpers.scss:
--------------------------------------------------------------------------------
1 | @mixin last-margin {
2 | > *:last-child {
3 | margin-bottom: 0;
4 | }
5 | }
6 |
7 | @mixin margin-bottom ($margin-bottom: .8em) {
8 | margin-bottom: $margin-bottom;
9 | &:last-child {
10 | margin-bottom: 0;
11 | }
12 | }
13 |
14 | @mixin focus ($color: $secondary, $opacity: .4) {
15 | box-shadow: 0 0 4px rgba($color,$opacity);
16 | outline: none;
17 | }
18 |
19 | @mixin ellipsis {
20 | white-space: nowrap;
21 | overflow: hidden;
22 | text-overflow: ellipsis;
23 | }
24 |
25 | // Helpers
26 | .sr-only {
27 | position: absolute;
28 | width: 1px;
29 | height: 1px;
30 | margin: -1px;
31 | padding: 0;
32 | overflow: hidden;
33 | clip: rect(0,0,0,0);
34 | border: 0;
35 | }
36 |
37 | .reset-link{
38 | color: inherit;
39 | &:hover,
40 | &.active,
41 | &:focus{
42 | text-decoration: none;
43 | }
44 | }
45 |
46 | .list-reset{
47 | margin-left: 0;
48 | margin-right: 0;
49 | padding-left: 0;
50 | padding-right: 0;
51 | list-style: none;
52 | }
53 |
54 | .list-inline{
55 | > li{
56 | display: inline-block;
57 | vertical-align: top;
58 | }
59 |
60 | > dt{
61 | clear: both;
62 | margin-right: 0.3em;
63 | }
64 |
65 | > dt,
66 | > dd{
67 | float: left;
68 | margin-bottom: 0;
69 | }
70 | }
71 |
72 | .pull-right {
73 | float: right !important;
74 | }
75 |
76 | .pull-left {
77 | float: left !important;
78 | }
79 |
80 | .align-center{
81 | text-align: center;
82 | }
83 |
84 | .align-right {
85 | text-align: right;
86 | }
87 |
88 | .align-left {
89 | text-align: left;
90 | }
91 |
92 | .vertical-middle {
93 | vertical-align: middle;
94 | }
95 |
96 | .nowrapp {
97 | white-space: nowrap;
98 | }
99 |
100 | .vertical-relative{
101 | position: relative;
102 | top: 50%;
103 | transform: translateY(-50%);
104 | }
105 |
106 | .hidden{
107 | display: none;
108 | }
109 |
110 | @each $color in $colors {
111 | .bg-#{nth($color, 1)} {
112 | background-color: nth($color, 2);
113 | @if(nth($color, 3)){
114 | color: nth($color, 3);
115 | }
116 | }
117 |
118 | .text-#{nth($color, 1)} {
119 | color: nth($color, 2);
120 | }
121 | }
122 |
--------------------------------------------------------------------------------
/source/stylesheets/utilities/_keyframes.scss:
--------------------------------------------------------------------------------
1 | // Keyframes
2 |
3 | @keyframes fadeIn {
4 | 0% {
5 | opacity: 0
6 | }
7 | 100% {
8 | opacity: 1
9 | }
10 | }
11 |
12 | @keyframes fadeOut {
13 | 0%{
14 | opacity: 1
15 | }
16 | 100%{
17 | opacity: 0
18 | }
19 | }
20 |
21 | @keyframes shadow {
22 | 0% {
23 | box-shadow: 0;
24 | }
25 | 50% {
26 | box-shadow: 0 2px 6px rgba(black, .12);
27 | }
28 | 100% {
29 | box-shadow: $shadow;
30 | }
31 | }
32 |
33 | @keyframes bottom-down {
34 | 0% {
35 | transform: translateY(0);
36 | }
37 | 100% {
38 | transform: translateY(5px);
39 | }
40 | }
41 |
42 | @keyframes escale10 {
43 | 0% {
44 | transform: scale(1);
45 | }
46 | 60% {
47 | transform: scale(1);
48 | }
49 | 80% {
50 | transform: scale(1.1);
51 | }
52 | 100% {
53 | transform: scale(1);
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/source/stylesheets/utilities/_mixins.scss:
--------------------------------------------------------------------------------
1 | @function font-url($font-name) {
2 | $fonts-path: '~assets/fonts/' !default;
3 | @return url(quote($fonts-path + $url));
4 | }
5 |
6 | @function image-url($url) {
7 | $images-path: '~assets/images/' !default;
8 | @return url(quote($images-path + $url));
9 | }
10 |
--------------------------------------------------------------------------------
/source/stylesheets/utilities/_normalize.scss:
--------------------------------------------------------------------------------
1 | /*! normalize.css v3.0.2 | MIT License | git.io/normalize */
2 |
3 | //
4 | // 1. Set default font family to sans-serif.
5 | // 2. Prevent iOS text size adjust after orientation change, without disabling
6 | // user zoom.
7 | //
8 |
9 | html {
10 | font-family: sans-serif; // 1
11 | -ms-text-size-adjust: 100%; // 2
12 | -webkit-text-size-adjust: 100%; // 2
13 | }
14 |
15 | //
16 | // Remove default margin.
17 | //
18 |
19 | body {
20 | margin: 0;
21 | }
22 |
23 | // HTML5 display definitions
24 | // ==========================================================================
25 |
26 | //
27 | // Correct `block` display not defined for any HTML5 element in IE 8/9.
28 | // Correct `block` display not defined for `details` or `summary` in IE 10/11
29 | // and Firefox.
30 | // Correct `block` display not defined for `main` in IE 11.
31 | //
32 |
33 | article,
34 | aside,
35 | details,
36 | figcaption,
37 | figure,
38 | footer,
39 | header,
40 | hgroup,
41 | main,
42 | menu,
43 | nav,
44 | section,
45 | summary {
46 | display: block;
47 | }
48 |
49 | //
50 | // 1. Correct `inline-block` display not defined in IE 8/9.
51 | // 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
52 | //
53 |
54 | audio,
55 | canvas,
56 | progress,
57 | video {
58 | display: inline-block; // 1
59 | vertical-align: baseline; // 2
60 | }
61 |
62 | //
63 | // Prevent modern browsers from displaying `audio` without controls.
64 | // Remove excess height in iOS 5 devices.
65 | //
66 |
67 | audio:not([controls]) {
68 | display: none;
69 | height: 0;
70 | }
71 |
72 | //
73 | // Address `[hidden]` styling not present in IE 8/9/10.
74 | // Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
75 | //
76 |
77 | [hidden],
78 | template {
79 | display: none;
80 | }
81 |
82 | // Links
83 | // ==========================================================================
84 |
85 | //
86 | // Remove the gray background color from active links in IE 10.
87 | //
88 |
89 | a {
90 | background-color: transparent;
91 | }
92 |
93 | //
94 | // Improve readability when focused and also mouse hovered in all browsers.
95 | //
96 |
97 | a:active,
98 | a:hover {
99 | outline: 0;
100 | }
101 |
102 | // Text-level semantics
103 | // ==========================================================================
104 |
105 | //
106 | // Address styling not present in IE 8/9/10/11, Safari, and Chrome.
107 | //
108 |
109 | abbr[title] {
110 | border-bottom: 1px dotted;
111 | }
112 |
113 | //
114 | // Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
115 | //
116 |
117 | b,
118 | strong {
119 | font-weight: bold;
120 | }
121 |
122 | //
123 | // Address styling not present in Safari and Chrome.
124 | //
125 |
126 | dfn {
127 | font-style: italic;
128 | }
129 |
130 | //
131 | // Address variable `h1` font-size and margin within `section` and `article`
132 | // contexts in Firefox 4+, Safari, and Chrome.
133 | //
134 |
135 | h1 {
136 | font-size: 2em;
137 | margin: 0.67em 0;
138 | }
139 |
140 | //
141 | // Address styling not present in IE 8/9.
142 | //
143 |
144 | mark {
145 | background: #ff0;
146 | color: #000;
147 | }
148 |
149 | //
150 | // Address inconsistent and variable font size in all browsers.
151 | //
152 |
153 | small {
154 | font-size: 80%;
155 | }
156 |
157 | //
158 | // Prevent `sub` and `sup` affecting `line-height` in all browsers.
159 | //
160 |
161 | sub,
162 | sup {
163 | font-size: 75%;
164 | line-height: 0;
165 | position: relative;
166 | vertical-align: baseline;
167 | }
168 |
169 | sup {
170 | top: -0.5em;
171 | }
172 |
173 | sub {
174 | bottom: -0.25em;
175 | }
176 |
177 | // Embedded content
178 | // ==========================================================================
179 |
180 | //
181 | // Remove border when inside `a` element in IE 8/9/10.
182 | //
183 |
184 | img {
185 | border: 0;
186 | }
187 |
188 | //
189 | // Correct overflow not hidden in IE 9/10/11.
190 | //
191 |
192 | svg:not(:root) {
193 | overflow: hidden;
194 | }
195 |
196 | // Grouping content
197 | // ==========================================================================
198 |
199 | //
200 | // Address margin not present in IE 8/9 and Safari.
201 | //
202 |
203 | figure {
204 | margin: 1em 40px;
205 | }
206 |
207 | //
208 | // Address differences between Firefox and other browsers.
209 | //
210 |
211 | hr {
212 | -moz-box-sizing: content-box;
213 | box-sizing: content-box;
214 | height: 0;
215 | }
216 |
217 | //
218 | // Contain overflow in all browsers.
219 | //
220 |
221 | pre {
222 | overflow: auto;
223 | }
224 |
225 | //
226 | // Address odd `em`-unit font size rendering in all browsers.
227 | //
228 |
229 | code,
230 | kbd,
231 | pre,
232 | samp {
233 | font-family: monospace, monospace;
234 | font-size: 1em;
235 | }
236 |
237 | // Forms
238 | // ==========================================================================
239 |
240 | //
241 | // Known limitation: by default, Chrome and Safari on OS X allow very limited
242 | // styling of `select`, unless a `border` property is set.
243 | //
244 |
245 | //
246 | // 1. Correct color not being inherited.
247 | // Known issue: affects color of disabled elements.
248 | // 2. Correct font properties not being inherited.
249 | // 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
250 | //
251 |
252 | button,
253 | input,
254 | optgroup,
255 | select,
256 | textarea {
257 | color: inherit; // 1
258 | font: inherit; // 2
259 | margin: 0; // 3
260 | }
261 |
262 | //
263 | // Address `overflow` set to `hidden` in IE 8/9/10/11.
264 | //
265 |
266 | button {
267 | overflow: visible;
268 | }
269 |
270 | //
271 | // Address inconsistent `text-transform` inheritance for `button` and `select`.
272 | // All other form control elements do not inherit `text-transform` values.
273 | // Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
274 | // Correct `select` style inheritance in Firefox.
275 | //
276 |
277 | button,
278 | select {
279 | text-transform: none;
280 | }
281 |
282 | //
283 | // 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
284 | // and `video` controls.
285 | // 2. Correct inability to style clickable `input` types in iOS.
286 | // 3. Improve usability and consistency of cursor style between image-type
287 | // `input` and others.
288 | //
289 |
290 | button,
291 | html input[type="button"], // 1
292 | input[type="reset"],
293 | input[type="submit"] {
294 | -webkit-appearance: button; // 2
295 | cursor: pointer; // 3
296 | }
297 |
298 | //
299 | // Re-set default cursor for disabled elements.
300 | //
301 |
302 | button[disabled],
303 | html input[disabled] {
304 | cursor: default;
305 | }
306 |
307 | //
308 | // Remove inner padding and border in Firefox 4+.
309 | //
310 |
311 | button::-moz-focus-inner,
312 | input::-moz-focus-inner {
313 | border: 0;
314 | padding: 0;
315 | }
316 |
317 | //
318 | // Address Firefox 4+ setting `line-height` on `input` using `!important` in
319 | // the UA stylesheet.
320 | //
321 |
322 | input {
323 | line-height: normal;
324 | }
325 |
326 | //
327 | // It's recommended that you don't attempt to style these elements.
328 | // Firefox's implementation doesn't respect box-sizing, padding, or width.
329 | //
330 | // 1. Address box sizing set to `content-box` in IE 8/9/10.
331 | // 2. Remove excess padding in IE 8/9/10.
332 | //
333 |
334 | input[type="checkbox"],
335 | input[type="radio"] {
336 | box-sizing: border-box; // 1
337 | padding: 0; // 2
338 | }
339 |
340 | //
341 | // Fix the cursor style for Chrome's increment/decrement buttons. For certain
342 | // `font-size` values of the `input`, it causes the cursor style of the
343 | // decrement button to change from `default` to `text`.
344 | //
345 |
346 | input[type="number"]::-webkit-inner-spin-button,
347 | input[type="number"]::-webkit-outer-spin-button {
348 | height: auto;
349 | }
350 |
351 | //
352 | // 1. Address `appearance` set to `searchfield` in Safari and Chrome.
353 | // 2. Address `box-sizing` set to `border-box` in Safari and Chrome
354 | // (include `-moz` to future-proof).
355 | //
356 |
357 | input[type="search"] {
358 | -webkit-appearance: textfield; // 1
359 | -moz-box-sizing: content-box;
360 | -webkit-box-sizing: content-box; // 2
361 | box-sizing: content-box;
362 | }
363 |
364 | //
365 | // Remove inner padding and search cancel button in Safari and Chrome on OS X.
366 | // Safari (but not Chrome) clips the cancel button when the search input has
367 | // padding (and `textfield` appearance).
368 | //
369 |
370 | input[type="search"]::-webkit-search-cancel-button,
371 | input[type="search"]::-webkit-search-decoration {
372 | -webkit-appearance: none;
373 | }
374 |
375 | //
376 | // Define consistent border, margin, and padding.
377 | //
378 |
379 | fieldset {
380 | border: 1px solid #c0c0c0;
381 | margin: 0 2px;
382 | padding: 0.35em 0.625em 0.75em;
383 | }
384 |
385 | //
386 | // 1. Correct `color` not being inherited in IE 8/9/10/11.
387 | // 2. Remove padding so people aren't caught out if they zero out fieldsets.
388 | //
389 |
390 | legend {
391 | border: 0; // 1
392 | padding: 0; // 2
393 | }
394 |
395 | //
396 | // Remove default vertical scrollbar in IE 8/9/10/11.
397 | //
398 |
399 | textarea {
400 | overflow: auto;
401 | }
402 |
403 | //
404 | // Don't inherit the `font-weight` (applied by a rule above).
405 | // NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
406 | //
407 |
408 | optgroup {
409 | font-weight: bold;
410 | }
411 |
412 | // Tables
413 | // ==========================================================================
414 |
415 | //
416 | // Remove most spacing between table cells.
417 | //
418 |
419 | table {
420 | border-collapse: collapse;
421 | border-spacing: 0;
422 | }
423 |
424 | td,
425 | th {
426 | padding: 0;
427 | }
428 |
--------------------------------------------------------------------------------
/source/stylesheets/utilities/_variables.scss:
--------------------------------------------------------------------------------
1 | //COLORS
2 | $font-color: #22252A;
3 | $font-color-light: #555A63;
4 | $background-primary: #F9F9F9;
5 | $background-secondary:#FFFFFF;
6 | $primary: #E74C3C;
7 | $primary-light: #F1C3BF;
8 | $primary-lighter: #F9F2F2;
9 | $secondary: #22252A;
10 | $secondary-light: #555A63;
11 | $secondary-lighter: #E6E9EE;
12 | $border-color: #E6E9EE;
13 | $success: #57BC27;
14 | $warning: #F9B13D;
15 | $text-negative: white;
16 |
17 | //name //color //text or false
18 | $colors: "primary" $primary $text-negative,
19 | "primary-light" $primary-light $text-negative,
20 | "primary-lighter" $primary-lighter false,
21 | "secondary" $secondary $text-negative,
22 | "secondary-light" $secondary-light $text-negative,
23 | "secondary-lighter" $secondary-lighter false,
24 | "font-color" $font-color $text-negative,
25 | "font-color-light" $font-color-light $text-negative,
26 | "background-primary" $background-primary false,
27 | "background-secondary" $background-secondary false,
28 | "white" white false,
29 | "black" black $text-negative,
30 | "success" $success $text-negative,
31 | "warning" $warning $text-negative;
32 |
33 | $gutter: 2.4rem;
34 | $header-height: 7rem;
35 | $header-height-breakpoint: 5rem;
36 | $nav-responsive-width: 26rem;
37 |
38 | $components-line-height: normal;
39 | $components-padding: .4em 1em;
40 |
41 | $border-radius: 3px;
42 | $shadow: 0 2px 4px rgba(black, .08);
43 |
--------------------------------------------------------------------------------
/source/terms-and-conditions.html.erb:
--------------------------------------------------------------------------------
1 | ---
2 | title: Terms and conditions
3 | layout: primary
4 | body: sign-in
5 | terms_date: 31/12/2024
6 | terms_url: https://marsman.marsbased.com
7 | terms_company: marsbased
8 | ---
9 |
10 |
11 |
Terms and Conditions ("Terms")
12 |
13 | Last updated: (<%= current_page.data.terms_date %>)
14 |
15 |
16 | Please read these Terms and Conditions ("Terms", "Terms and Conditions") carefully before using the <%= current_page.data.terms_url %> website (the "Service") operated by <%= current_page.data.terms_company %> ("us", "we", or "our").
17 |
18 |
19 | Your access to and use of the Service is conditioned on your acceptance of and compliance with these Terms. These Terms apply to all visitors, users and others who access or use the Service.
20 |
21 |
22 | By accessing or using the Service you agree to be bound by these Terms. If you disagree with any part of the terms then you may not access the Service.
23 |
24 |
Purchases
25 | <%= simple_format lorem.paragraphs(rand(1..6)) %>
26 |
Content
27 | <%= simple_format lorem.paragraphs(rand(1..6)) %>
28 |
Changes
29 | <%= simple_format lorem.paragraphs(rand(1..6)) %>
30 |
Contact
31 | <%= simple_format lorem.paragraphs(rand(1..6)) %>
32 |
33 |
--------------------------------------------------------------------------------
/source/toolkit.html.erb:
--------------------------------------------------------------------------------
1 | ---
2 | title: Toolkit
3 | versions: error
4 | body: toolkit
5 | ---
6 |
199 |
391 |
--------------------------------------------------------------------------------
/source/whole-page-text.html.erb:
--------------------------------------------------------------------------------
1 | ---
2 | title: Welcome to marsman Template
3 | body: whole-page-test
4 | layout: basic
5 | ---
6 |
7 |
8 |
14 |
15 |
<%= Faker::Lorem.paragraph(10) %>
16 |
17 | <%= Faker::Lorem.paragraph(2) %>
18 |
19 |
<%= Faker::Lorem.paragraph(3) %>
20 |
<%= Faker::ChuckNorris.fact %>
21 |
<%= Faker::Lorem.paragraph(5) %>
22 |
23 |
24 |
<%= Faker::ChuckNorris.fact %>
25 |
<%= Faker::Lorem.paragraph(5) %>
26 |
<%= Faker::Lorem.paragraph(2) %>
27 |
28 |
29 | <%= Faker::GameOfThrones.character %>
30 | <%= Faker::GameOfThrones.character %>
31 | <%= Faker::GameOfThrones.character %>
32 |
33 |
34 |
35 | <%= image_tag(Faker::LoremPixel.image("600x600", false, 'fashion')) %>
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------