@nyris/nyris-webapp 0.3.6 → 0.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/App.tsx CHANGED
@@ -1,41 +1,42 @@
1
- import './App.css';
2
- import React, {useEffect, useState} from 'react';
3
- import Result from './components/Result';
4
- import ExampleImages from './components/ExampleImages';
5
- import Feedback from './components/Feedback';
1
+ import React, { useEffect, useState } from "react";
2
+ import { useDispatch } from "react-redux";
3
+ import { Animate, NodeGroup } from "react-move";
4
+ import { useDropzone} from "react-dropzone";
5
+ import {
6
+ Box,
7
+ Snackbar
8
+ } from "@material-ui/core";
9
+ import { Alert } from "@material-ui/lab";
10
+ import classNames from "classnames";
11
+ import { loadFilters } from "./actions/searchActions";
12
+ import Result from "./components/Result";
13
+ import Sidebar from "./components/Sidebar";
14
+ import Header from "./components/Header";
15
+ import Feedback from "./components/Feedback";
6
16
  import CategoryFilter from "./components/CategoryFilter";
7
- import PredictedCategories from "./components/PredictedCategories";
8
17
  import Codes from "./components/Codes";
9
- import {Code, CategoryPrediction, RectCoords, Region, cadExtensions, Filter} from "@nyris/nyris-api";
10
- import { useDropzone} from "react-dropzone";
11
- import classNames from 'classnames';
12
- import {Animate, NodeGroup} from "react-move";
13
- import {AppSettings, MDSettings, CanvasWithId} from "./types";
14
- import {NyrisAppPart, NyrisFeedbackState} from "./actions/nyrisAppActions";
18
+ import PredictedCategories from "./components/PredictedCategories";
19
+ import ExampleImages from "./components/ExampleImages";
15
20
  import {makeFileHandler, Capture, Preview} from "@nyris/nyris-react-components";
16
- import {Drawer, Snackbar, Toolbar} from "@material-ui/core";
17
- import MuiAlert, { AlertProps } from '@material-ui/lab/Alert';
18
- import { dispatch } from 'rxjs/internal/observable/pairs';
19
- import { useDispatch } from 'react-redux';
20
- import { loadFilters } from './actions/searchActions';
21
- import Sidebar from './components/Sidebar';
21
+ import { RectCoords, cadExtensions, CategoryPrediction, Code, Region, Filter} from "@nyris/nyris-api";
22
+ import { AppSettings, CanvasWithId, MDSettings } from "./types";
23
+ import { NyrisAppPart, NyrisFeedbackState } from "./actions/nyrisAppActions";
22
24
 
23
25
  export interface AppHandlers {
24
- onExampleImageClick: (url: string) => void,
25
- onImageClick: (position: number, url: string) => void,
26
- onLinkClick: (position: number, url: string) => void,
27
- onFileDropped: (file: File) => void,
28
- onCaptureComplete: (image: HTMLCanvasElement) => void,
29
- onCaptureCanceled: () => void,
30
- onSelectFile: (f: File) => void,
31
- onCameraClick: () => void,
32
- onShowStart: () => void,
33
- onSelectionChange: (r: RectCoords) => void,
34
- onPositiveFeedback: () => void,
35
- onNegativeFeedback: () => void,
36
- onCloseFeedback: () => void
26
+ onExampleImageClick: (url: string) => void,
27
+ onImageClick: (position: number, url: string) => void,
28
+ onLinkClick: (position: number, url: string) => void,
29
+ onFileDropped: (file: File) => void,
30
+ onCaptureComplete: (image: HTMLCanvasElement) => void,
31
+ onCaptureCanceled: () => void,
32
+ onSelectFile: (f: File) => void,
33
+ onCameraClick: () => void,
34
+ onShowStart: () => void,
35
+ onSelectionChange: (r: RectCoords) => void,
36
+ onPositiveFeedback: () => void,
37
+ onNegativeFeedback: () => void,
38
+ onCloseFeedback: () => void
37
39
  }
38
-
39
40
  export interface AppProps {
40
41
  search: {
41
42
  results: any[],
@@ -48,7 +49,8 @@ export interface AppProps {
48
49
  regions: Region[],
49
50
  previewSelection: RectCoords,
50
51
  toastErrorMessage?: string,
51
- filters: Filter[]
52
+ filters: Filter[],
53
+ selectedFilters: Map<string,string[]>
52
54
  },
53
55
  previewImage?: CanvasWithId,
54
56
  settings: AppSettings,
@@ -59,70 +61,54 @@ export interface AppProps {
59
61
  mdSettings: MDSettings
60
62
  }
61
63
 
62
- function Alert(props: AlertProps) {
63
- return <MuiAlert elevation={6} variant="filled" {...props} />;
64
- }
65
-
66
- const App: React.FC<AppProps> = ({
67
- search: {results, regions, previewSelection, requestId, duration, errorMessage, filterOptions, categoryPredictions, codes, toastErrorMessage, filters},
68
- showPart, settings, handlers, loading, previewImage, feedbackState
69
- }) => {
64
+ const Demo2: React.FC<AppProps> = ({
65
+ search: {results, regions, previewSelection, requestId, duration, errorMessage, filterOptions, categoryPredictions, codes, toastErrorMessage, filters, selectedFilters},
66
+ showPart, settings, handlers, loading, previewImage, feedbackState
67
+ }) => {
68
+
70
69
  const {getRootProps, getInputProps, isDragActive} = useDropzone({onDrop: (fs: File[]) => handlers.onFileDropped(fs[0])});
70
+
71
71
  const minPreviewHeight = 400;
72
72
  const halfOfTheScreenHeight = Math.floor(window.innerHeight * 0.45);
73
73
  const maxPreviewHeight = Math.max(minPreviewHeight, halfOfTheScreenHeight);
74
- const acceptTypes =
75
- [ 'image/*' ].concat(
76
- settings.cadSearch ? cadExtensions : []
77
- ).join(',');
78
74
  const [toastOpen, setToastOpen] = useState(false);
79
75
  const dispatch = useDispatch();
80
76
 
77
+ const acceptTypes =[ 'image/*' ].concat( settings.cadSearch ? cadExtensions : [] ).join(',');
78
+
79
+
81
80
  useEffect(() => {
82
81
  if (toastErrorMessage !== '') {
83
82
  setToastOpen(true);
84
83
  }
85
84
  }, [toastErrorMessage])
86
-
85
+
87
86
  useEffect(() =>{
88
87
  dispatch(loadFilters());
89
- }, [])
90
-
91
- return (
92
- <div>
93
- {showPart === 'camera' &&
88
+ }, [showPart, dispatch])
89
+
90
+ return (
91
+ <React.Fragment>
92
+ <Header/>
93
+ <div className="wrapperBody">
94
+ <Sidebar filters={filters} selectedFilters={selectedFilters}/>
95
+
96
+ <div className="mainContent">
97
+ {showPart === 'camera' &&
94
98
  <Capture onCaptureComplete={handlers.onCaptureComplete} onCaptureCanceled={handlers.onCaptureCanceled}
95
99
  useAppText='Use default camera app'/>}
96
- <div className={classNames('headSection', {hidden: showPart === 'results'})} id="headSection">
97
- <div className="navWrap">
98
- <div>
99
- <section id="branding" style={{paddingLeft: '50px',marginLeft: '70px'}}/>
100
- <div id="menu" className="menuWrap" role="navigation">
101
- <ul>
102
- <li><a href="https://nyris.io/imprint/#privacy" target="_blank"
103
- rel="noopener noreferrer">Privacy Policy</a></li>
104
- <li><a href="https://nyris.io/" target="_blank" rel="noopener noreferrer">Visit our
105
- Website</a></li>
106
- </ul>
107
- </div>
108
- </div>
109
- </div>
100
+
101
+
102
+ <div className={classNames('headSection', {hidden: showPart === 'results'})} id="headSection">
110
103
  <div {...getRootProps({
111
104
  onClick: e => {
112
105
  e.stopPropagation();
113
106
  }
114
107
  })} className={classNames('wrapper', 'dragAndDropActionArea', {'fileIsHover': isDragActive})}>
115
- <section style={{width:'350px', height: '100%' , marginTop: '100px', borderRight:'4px solid rgba(255, 255, 255, .12)'}}>
116
- <Toolbar>
117
-
118
- <div> Select Filters </div>
119
- </Toolbar>
120
- { filters && filters.length > 0 ? <Sidebar filters={filters}/> : <div></div> }
121
-
122
-
123
- </section>
124
- <div className="contentWrap" style={{marginLeft: '50px', marginTop:'50px'}}>
125
- <section className="uploadImage">
108
+
109
+ <div className={classNames('contentWrap')}>
110
+ <Box display="flex" flexDirection="column" justifyContent="center" alignItems="center" minHeight="100vh">
111
+ <section className="uploadImage">
126
112
  <input type="button" name="file" id="capture" className="inputfile" accept="image/*"
127
113
  capture="environment" onClick={handlers.onCameraClick}/>
128
114
  <input type="file" name="file" id="capture_file" className="inputfile" accept={acceptTypes}
@@ -139,18 +125,23 @@ const App: React.FC<AppProps> = ({
139
125
  <img src="./images/ic_cam_large.svg" alt="Camera"/>
140
126
  </div>
141
127
  <label htmlFor="capture" className="btn primary onMobile"
142
- style={{marginBottom: '2em', width: '22em'}}>
128
+ style={{marginBottom: '2em', width: '12em'}}>
143
129
  <span className="onMobile">Take a picture</span>
144
130
  </label>
145
131
  <br/>
146
- <label htmlFor="select_file" className="btn primary" style={{width: '22em'}}>
132
+ <label htmlFor="select_file" className="btn primary" style={{width: '12em'}}>
147
133
  <span>Select a file</span>
148
134
  </label>
149
135
  <label htmlFor="capture" className="mobileUploadHandler onMobile"/>
150
- </section>
151
- <ExampleImages images={settings.exampleImages} onExampleImageClicked={handlers.onExampleImageClick}/>
136
+ </section>
137
+ <ExampleImages images={settings.exampleImages} onExampleImageClicked={handlers.onExampleImageClick}/>
138
+
139
+ </Box>
152
140
  </div>
153
141
  </div>
142
+
143
+ <div className="headerSeparatorTop"/>
144
+ <div className="headerSeparatorBack"/>
154
145
  <div className={classNames('tryDifferent', {hidden: showPart !== 'results'})}
155
146
  onClick={handlers.onShowStart}>
156
147
  <div className="icIcon">
@@ -158,16 +149,13 @@ const App: React.FC<AppProps> = ({
158
149
  <div className="textDesc"> Try a different image</div>
159
150
  <br style={{clear: 'both'}}/>
160
151
  </div>
161
- <div className="headerSeparatorTop"/>
162
- <div className="headerSeparatorBack"/>
163
152
  </div>
164
-
165
- <section
166
- className={classNames('results', {resultsActive: showPart === 'results'}, (results.length === 1 ? 'singleProduct' : 'multipleProducts'))}>
153
+
154
+ <section className={classNames({hideResults: showPart !== 'results'},'results', {resultsActive: showPart === 'results'}, (results.length === 1 ? 'singleProduct' : 'multipleProducts'))}>
167
155
  {errorMessage &&
168
156
  <div className="errorMsg">
169
157
  {errorMessage}
170
- <div style={{textAlign: 'center', fontSize: '0.7em', paddingTop: '0.8em'}}><span>Make sure to include the request ID when reporting a problem: {requestId}</span>
158
+ <div style={{textAlign: 'center', fontSize: '0ß.7em', paddingTop: '0.8em'}}><span>Make sure to include the request ID when reporting a problem: {requestId}</span>
171
159
  </div>
172
160
  </div>
173
161
  }
@@ -236,8 +224,10 @@ const App: React.FC<AppProps> = ({
236
224
  <Alert onClose={() => setToastOpen(false)} severity="error">
237
225
  {toastErrorMessage}
238
226
  </Alert>
239
- </Snackbar>
240
-
227
+ </Snackbar>
228
+
229
+ </div>
230
+ </div>
241
231
  <section className="footnote">
242
232
  <div className="wrapper">
243
233
  © 2017 - 2019 <a href="https://nyris.io">nyris GmbH</a> - All rights reserved - <a
@@ -246,11 +236,9 @@ const App: React.FC<AppProps> = ({
246
236
  </section>
247
237
  <Feedback feedbackState={feedbackState} onPositiveFeedback={handlers.onPositiveFeedback}
248
238
  onNegativeFeedback={handlers.onNegativeFeedback} onClose={handlers.onCloseFeedback}/>
249
- </div>
250
- );
251
-
252
- };
253
-
254
-
239
+
240
+ </React.Fragment>
241
+ );
242
+ }
255
243
 
256
- export default App;
244
+ export default Demo2;
@@ -25,9 +25,7 @@ export type SearchAction =
25
25
  | { type: 'LOAD_FILTERS_SUCCESS', filters: Filter[]}
26
26
  | { type: 'LOAD_FILTERS_FAIL', reason: string, exception: any}
27
27
  | { type: 'ADD_TO_SELECTEDFILTERS', key: string, value : string}
28
- | { type: 'ADD_TO_SELECTEDFILTERS_SUCCESS', key: string , value : string}
29
28
  | { type: 'REMOVE_FROM_SELECTEDFILTERS', key: string , value: string}
30
- | { type: 'REMOVE_FROM_SELECTEDFILTERS_SUCCESS', key: string , value: string}
31
29
  | { type: 'CLEAR_SELECTED_FILTERS'}
32
30
 
33
31
 
@@ -166,12 +164,12 @@ export const reducer = (state : SearchState = initialState, action: SearchAction
166
164
  ...state,
167
165
  errorMessage: action.exception.response.data.detail
168
166
  }
169
- case "ADD_TO_SELECTEDFILTERS_SUCCESS":
167
+ case "ADD_TO_SELECTEDFILTERS":
170
168
  return {
171
169
  ...state,
172
170
  selectedFilters : ADDtoSelectedfilters(state.selectedFilters, action.key, action.value)
173
171
  }
174
- case "REMOVE_FROM_SELECTEDFILTERS_SUCCESS":
172
+ case "REMOVE_FROM_SELECTEDFILTERS":
175
173
  return {
176
174
  ...state,
177
175
  selectedFilters : RemoveFromSelectedFilters(state.selectedFilters, action.key, action.value)
@@ -214,5 +212,6 @@ function RemoveFromSelectedFilters(selectedFilters: Map<string, string[]>, key:
214
212
  }
215
213
 
216
214
  }
215
+ console.log(selectedFilters);
217
216
  return selectedFilters;
218
217
  }
@@ -1,34 +1,28 @@
1
1
 
2
- import React, { useState } from 'react';
2
+ import React from 'react';
3
3
  import {Filter} from '../../../nyris-api/index';
4
4
  import { addToSelectedFilters, removeFromSelectedFilters } from '../actions/searchActions';
5
5
  import { useDispatch } from 'react-redux';
6
6
  import { RiLayoutGridLine} from 'react-icons/ri';
7
7
 
8
8
  interface FilterProps {
9
- filter : Filter
9
+ filter : Filter,
10
+ selectedValues?: string[]
10
11
  }
11
12
 
12
13
 
13
14
 
14
- const FiltersList : React.FC<FilterProps> = ({filter})=>{
15
- const [checked, setChecked] = useState<string[]>([]);
15
+ const FiltersList : React.FC<FilterProps> = ({filter, selectedValues})=>{
16
16
  const dispatch = useDispatch();
17
17
 
18
- const onFilterChanged=(e: React.ChangeEvent<HTMLInputElement>,value:string) =>{
19
- var updatedList = [...checked];
20
- console.log(e.target.checked);
18
+ const onFilterChanged=(e: React.ChangeEvent<HTMLInputElement>,value:string) =>{
21
19
  if (e.target.checked) {
22
20
  if(filter.key)
23
21
  dispatch(addToSelectedFilters(filter.key , value));
24
- updatedList = [...checked, value];
25
22
  } else {
26
23
  if(filter.key)
27
24
  dispatch(removeFromSelectedFilters(filter.key, value));
28
- updatedList.splice(checked.indexOf(value), 1);
29
25
  }
30
- setChecked(updatedList);
31
- console.log(updatedList);
32
26
  }
33
27
 
34
28
  if(filter && filter.values && filter.key && filter.values.length > 0){
@@ -43,13 +37,17 @@ const FiltersList : React.FC<FilterProps> = ({filter})=>{
43
37
  <div className='item'>
44
38
  <div className="list-container">
45
39
 
46
- {filter.values.slice(0, 6).map((item, index) => (
47
- <div key={index}>
48
- <input value={item} type="checkbox" onChange={(e)=>onFilterChanged(e,item)} />
49
-
50
- <label className='itemLabel'>{item}</label>
51
- </div>
52
- ))}
40
+ {filter.values.slice(0, 6).map((item, index) => {
41
+ const checked = selectedValues && selectedValues.includes(item);
42
+ return (
43
+
44
+ <div key={index}>
45
+
46
+ <input value={item} checked={checked ? true: false} type="checkbox" onChange={(e)=>onFilterChanged(e,item)} />
47
+ <label className='itemLabel'>{item}</label>
48
+ </div>
49
+ )
50
+ })}
53
51
  </div>
54
52
  </div>
55
53
 
@@ -4,10 +4,11 @@ import { Filter } from '../../../nyris-api/index';
4
4
  import FiltersList from './FiltersList';
5
5
 
6
6
  interface SidebarProps {
7
- filters: Filter[]
7
+ filters: Filter[],
8
+ selectedFilters: Map<string, string[]>
8
9
  }
9
10
 
10
- const Sidebar: React.FC<SidebarProps> = ({filters}) =>{
11
+ const Sidebar: React.FC<SidebarProps> = ({filters, selectedFilters}) =>{
11
12
  const [isExpanded, setIsExpanded] = useState(false);
12
13
  const handleToggler =()=>{
13
14
  if(isExpanded){
@@ -25,8 +26,9 @@ const Sidebar: React.FC<SidebarProps> = ({filters}) =>{
25
26
  <h1 className={isExpanded ? "sidebar-logo" : "sidebar-logo collapsedHide"}> Select Filters </h1>
26
27
  </div>
27
28
  <div className={isExpanded ? "Sidebar-items" : "Sidebar-items collapsedHide"}>
28
- {filters && filters.map((x) => {
29
- return <FiltersList filter={x}/>
29
+ {filters && filters.map((x) => {
30
+ let selectedValues = x.key ? selectedFilters.get(x.key): undefined
31
+ return <FiltersList filter={x} selectedValues={selectedValues}/>
30
32
  })
31
33
  }
32
34
  </div>
@@ -145,28 +145,7 @@ const loadFilters: EpicConf = (action$, state$, {api}) => action$.pipe(
145
145
  let filters = await api.getFilters();
146
146
 
147
147
  filters= filters.slice(0, 3);
148
- console.log(filters);
149
- // let filters : Filter[] = [
150
- // {
151
- // filterType: 'MachineType',
152
- // filterValues : [
153
- // "MachineType1",
154
- // "MachineType2",
155
- // "MachineType3",
156
- // "MachineType4",
157
- // "MachineType5"
158
- // ]
159
- // },
160
- // {
161
- // filterType: 'Color',
162
- // filterValues :[
163
- // "Red",
164
- // "Green",
165
- // "Blue",
166
- // "Yellow",
167
- // "Black"
168
- // ]
169
- // }];
148
+ console.log(filters);
170
149
  return {type: 'LOAD_FILTERS_SUCCESS', filters };
171
150
 
172
151
  } catch (e) {
@@ -176,28 +155,10 @@ const loadFilters: EpicConf = (action$, state$, {api}) => action$.pipe(
176
155
  })
177
156
  );
178
157
 
179
- const addToSelectedFilters: EpicConf = (action$) => action$.pipe(
180
- ofType('ADD_TO_SELECTEDFILTERS'),
181
- switchMap(async (action) : Promise<AppAction> => {
182
-
183
- if(action.type !== 'ADD_TO_SELECTEDFILTERS'){
184
- throw new Error(`Wrong action type ${action.type}`);
185
- }
186
- if('key' in action && 'value' in action){
187
-
188
- let {key, value} = action;
189
- console.log(key);
190
- console.log(action);
191
- return {type : 'ADD_TO_SELECTEDFILTERS_SUCCESS', key , value }
192
- }
193
- throw new Error(`Change filters action wrong properties ${Object.keys(action).join(',')}`);
194
- })
195
- );
196
158
 
197
159
  export default combineEpics(
198
160
  imageSearch,
199
161
  regionSearch,
200
162
  loadFile,
201
163
  loadImage,
202
- loadFilters,
203
- addToSelectedFilters);
164
+ loadFilters);
package/src/index.css CHANGED
@@ -553,7 +553,7 @@ a img.aligncenter {
553
553
  }
554
554
 
555
555
  .headSection {
556
- position: absolute;
556
+ position: relative;
557
557
  width: 100%;
558
558
  height: 90vh;
559
559
  height: -webkit-calc(100vh - 30px);
@@ -648,7 +648,6 @@ a img.aligncenter {
648
648
  -webkit-box-pack: center;
649
649
  -ms-flex-pack: center;
650
650
  justify-content: center;
651
- margin-left: 35px;
652
651
  margin-top: 50px;
653
652
  }
654
653
  .dragAndDropActionArea:focus {
@@ -1474,8 +1473,9 @@ a img.aligncenter {
1474
1473
  }
1475
1474
  .mainContent{
1476
1475
  width: calc(100vh-230);
1477
- flex: 0 0 900px;
1476
+ flex: 0 0 80%;
1478
1477
  flex-grow: 1;
1478
+ position: inherit;
1479
1479
  }
1480
1480
  .sidebarContent {
1481
1481
  height: 100%;
package/src/index.tsx CHANGED
@@ -34,7 +34,7 @@ import 'typeface-roboto';
34
34
  import {defaultMdSettings, defaultSettings} from "./defaults";
35
35
  import rootEpic from "./epics";
36
36
  import { createHashHistory } from 'history';
37
- import Demo2 from './Demo2';
37
+ import App from './App';
38
38
 
39
39
 
40
40
  declare var settings: AppSettings;
@@ -91,6 +91,7 @@ history.listen((location, action) => {
91
91
  switch (location.pathname) {
92
92
  case '/results':
93
93
  store.dispatch({type: 'SHOW_RESULTS'});
94
+ store.dispatch({type: 'LOAD_FILTERS'});
94
95
  break;
95
96
  case '/':
96
97
  store.dispatch({type: 'SHOW_START'});
@@ -113,7 +114,8 @@ const mapStateToProps = (state: AppState) => ({
113
114
  duration: state.search.duration,
114
115
  requestId: state.search.requestId,
115
116
  toastErrorMessage: state.search.errorMessage,
116
- filters: state.search.filters
117
+ filters: state.search.filters,
118
+ selectedFilters: state.search.selectedFilters
117
119
  },
118
120
  settings: state.settings,
119
121
  previewImage: state.search.requestImage,
@@ -189,7 +191,7 @@ let theme = createMuiTheme({
189
191
  }
190
192
  }
191
193
  });
192
- const SelectedApp = useMd ? AppMD : Demo2;
194
+ const SelectedApp = useMd ? AppMD : App;
193
195
  const ConnectedApp = connect(mapStateToProps, mapDispatchToProps)(SelectedApp);
194
196
 
195
197
  ReactDOM.render(<Provider store={store}><MuiThemeProvider
@@ -1 +0,0 @@
1
- {"version":3,"sources":["index.css"],"names":[],"mappings":"AAAA,KACE,QAAS,CACT,mJAEY,CACZ,kCAAmC,CACnC,iCAAkC,CAClC,wBACF,CAEA,KACE,yEAEF,CAEA,eACE,uBACF,CAEA,8BACE,eACF,CAEA,2ZACE,YAAa,CACb,SAAU,CACV,QAAS,CACT,QAAS,CACT,uBACF,CAEA,aACE,WACF,CAEA,oDACE,UAAW,CACX,YACF,CAEA,MACE,wBAAyB,CACzB,gBACF,CAEA,8EACE,aACF,CAEA,OACE,UACF,CAEA,oBACE,0BAA8B,CAC9B,2BACF,CAEA,oCACE,iBACF,CAEA,EACE,qBACF,CAEA,SACE,SAAU,CACV,gBAAiB,CACjB,aAAc,CAGd,QACF,CAEA,oBACE,YAAa,CACb,iBACF,CAEA,wCACE,SACF,CAEA,0CACE,oBACE,YACF,CACF,CAEA,gEACE,oBACE,YACF,CACF,CAEA,4BACE,SACF,CAEA,aACE,kBAAmB,CACnB,kBAAmB,CACnB,kBAAmB,CAGnB,YACF,CAEA,sBACE,sBACF,CAEA,cACE,aAAc,CAGd,WAAY,CACZ,UACF,CAEA,UACE,SAAU,CACV,UACF,CAEA,+DACE,UACE,UAAW,CACX,UACF,CACF,CAEA,WACE,SAAU,CACV,UACF,CAEA,QACE,iBACF,CAEA,cACE,SAAU,CACV,oBACF,CAEA,gEACE,iBACE,YACF,CACF,CAEA,+DACE,cACE,UACF,CACF,CAEA,yCACE,WACE,YACF,CACF,CAEA,mCACE,yBACF,CAEA,2BACE,mBACF,CAEA,uCACE,cACF,CAEA,iBACE,UACF,CAEA,WACE,eAAgB,CAChB,kBAAmB,CAEnB,oDAA+D,CAC/D,+GACF,CAEA,2CACE,YACF,CAEA,KACE,eAAgB,CAChB,iBAAkB,CAClB,iBAAkB,CAClB,cAAe,CACf,gBAAiB,CACjB,wBAAyB,CACzB,oBAAqB,CACrB,iBAAkB,CAClB,WAAY,CACZ,eAAgB,CAChB,uBACF,CAEA,sBACE,YACF,CAEA,aACE,kBAAmB,CACnB,UACF,CAEA,mBACE,cAAe,CACf,UACF,CAEA,gBACE,2CACF,CAEA,sBACE,UACF,CAEA,uBAEE,iDAAqD,CAGrD,yBAA0B,CAC1B,2CACF,CAEA,6DACE,iBAAkB,CAClB,cAAe,CACf,cAAe,CACf,YAAa,CACb,KAAM,CACN,OAAQ,CACR,QAAS,CACT,MAAO,CACP,UAAW,CACX,kBACF,CAEA,WACE,kBAAmB,CACnB,yMAAiK,CACjK,eAAgB,CAChB,iBACF,CAEA,WACE,kBAAmB,CACnB,iMAAyJ,CACzJ,eAAgB,CAChB,iBACF,CAEA,WACE,kBAAmB,CACnB,6MAAqK,CACrK,eAAgB,CAChB,iBACF,CAEA,WACE,8BAA+B,CAC/B,sOAA8L,CAC9L,eAAgB,CAChB,iBACF,CAEA,WACE,8BAA+B,CAC/B,+PAAuN,CACvN,eAAgB,CAChB,iBACF,CAEA,kCACE,uBAA2B,CAC3B,6CAAiD,CACjD,cAAe,CACf,eAAgB,CAChB,eAAgB,CAChB,iCAAkC,CAClC,kCAAmC,CACnC,0BAA2B,CAC3B,iCACF,CAEA,6BACE,eACF,CAEA,KACE,kBACF,CAEA,kBACE,aACF,CAEA,MACE,iBAAkB,CAClB,aACF,CAEA,GACE,cAAe,CACf,kBACF,CAEA,iBACE,aAAc,CACd,cACF,CAEA,GACE,cAAe,CACf,qBACF,CAEA,iBACE,aAAc,CACd,cACF,CAEA,UACE,eACF,CAEA,+DACE,YACE,YACF,CACF,CAEA,GACE,aAAc,CACd,cAAe,CACf,eAAgB,CAChB,qBACF,CAEA,GACE,cAAe,CACf,qBACF,CAEA,GACE,cAAe,CACf,qBACF,CAEA,GACE,cAAe,CACf,oBACF,CAEA,EACE,kBACF,CAEA,IACE,yBACF,CAEA,GACE,iBACF,CAEA,WACE,cAAe,CACf,WACF,CAEA,EACE,oBAAqB,CACrB,uBACF,CAEA,QACE,cAAe,CACf,sBACF,CAEA,MACE,eAAgB,CAChB,iBACF,CAEA,YACE,eAAgB,CAChB,iBAAkB,CAClB,kBACF,CAEA,WACE,sBACF,CAEA,6BACE,aAAc,CACd,eACF,CAEA,YACE,WAAY,CACZ,sBACF,CAEA,WACE,UAAW,CACX,sBACF,CAEA,iBACE,WAAY,CACZ,sBACF,CAEA,gCACE,sBACF,CAEA,gBACE,UACF,CAEA,kBACE,aAAc,CACd,gBAAiB,CACjB,iBACF,CAEA,YACE,eAAgB,CAChB,wBAAyB,CACzB,aAAc,CACd,oBAAqB,CACrB,iBACF,CAEA,4CACE,sBACF,CAEA,uBACE,sBACF,CAEA,gBACE,QAAS,CACT,WAAY,CACZ,QAAS,CACT,eAAgB,CAChB,SAAU,CACV,UACF,CAEA,8CACE,cAAe,CACf,gBAAiB,CACjB,QAAS,CACT,iBACF,CAEA,aACE,sBACE,uBACF,CAEA,EACE,wBAA0B,CAC1B,oBAAsB,CACtB,yBAA2B,CAC3B,0BACF,CAEA,YACE,yBACF,CAEA,cACE,2BACF,CAEA,kBACE,4BACF,CAEA,4DACE,UACF,CAEA,eACE,qBACF,CAEA,MACE,0BACF,CAEA,IACE,wBACF,CAEA,MACE,WACF,CAEA,QACE,SAAU,CACV,QACF,CAEA,MACE,sBACF,CACF,CAEA,yCACE,iBAAkB,CAClB,OAAQ,CACR,WAAY,CACZ,MAAO,CACP,UAAW,CACX,WAAY,CACZ,YAAa,CACb,kFACF,CAEA,yDACE,gyZACF,CAEA,oBACE,WAAY,CACZ,YAAa,CACb,iFACF,CAEA,4BACE,w6HACF,CAEA,aACE,iBAAkB,CAClB,UAAW,CACX,WAAY,CAEZ,yBAA0B,CAC1B,kBAAmB,CACnB,qBACF,CAEA,oBACE,YAEF,CAEA,yCACE,aACE,gBACF,CACF,CAEA,sBACE,SAAU,CAGV,QACF,CAEA,SACE,UAAW,CACX,YAAa,CACb,iBAAkB,CAClB,YAAa,CACb,2CACF,CAEA,0BACE,iBAAkB,CAClB,SACF,CAEA,UACE,WAAY,CACZ,SACF,CAEA,aACE,QAAS,CACT,gBACF,CAEA,gBACE,UAAW,CACX,eAAgB,CAChB,QAAS,CACT,SACF,CAEA,kBACE,yBAA+B,CAC/B,sBAAuB,CACvB,cAAe,CACf,oBACF,CAEA,wBACE,UACF,CAEA,UACE,UAAW,CACX,UAAW,CACX,WAAY,CACZ,YAAa,CACb,w8FAAwD,CACxD,eAAgB,CAChB,oBAAqB,CACrB,uBACF,CAEA,yBACE,WACF,CAEA,uBACE,WAAY,CACZ,mBAAoB,CAGpB,YAAa,CAGb,kBAAmB,CAGnB,sBAAuB,CACvB,gBAAiB,CACjB,eACF,CACA,6BACE,SACF,CAEA,aAGE,aAAY,CACZ,eACF,CAEA,aACE,gBAAiB,CACjB,kBAAmB,CACnB,qCAA2C,CAC3C,cAAe,CACf,iBAAkB,CAClB,cAAe,CACf,2BAA+B,CAC/B,aAAc,CAEd,uBACF,CAEA,0CACE,aACE,cACF,CACF,CAEA,yCACE,aACE,cAAe,CACf,QAAS,CACT,WACF,CACF,CAEA,wBACE,cAAe,CACf,2BAA+B,CAC/B,oBACF,CAEA,0BACE,qCACF,CAEA,qBACE,iBAAkB,CAClB,UAAW,CACX,aAAc,CACd,QAAS,CACT,OAAQ,CACR,YAAa,CACb,MACF,CAEA,WACE,UAAW,CACX,WAAY,CACZ,SAAU,CACV,eAAgB,CAChB,iBAAkB,CAClB,UACF,CAEA,eACE,yBAA+B,CAC/B,cAAe,CACf,eACF,CAEA,yCACE,0BACE,QACF,CAEA,eACE,iBAAkB,CAClB,YAAa,CACb,UACF,CACF,CAEA,8BACE,eAAgB,CAChB,UAAW,CACX,aAAc,CACd,gCAAiC,CACjC,mBACF,CAEA,4CACE,kBACF,CAEA,kCACE,WAAY,CACZ,UAAW,CACX,WAAY,CACZ,iBAAkB,CAClB,gBAAiB,CACjB,qBACF,CAEA,wCACE,cAAe,CACf,SACF,CAEA,SACE,kBACF,CAEA,sBACE,UACE,YACF,CACF,CAEA,0CACE,WACE,YACF,CACF,CAEA,8CACE,oBAAqB,CACrB,kBACF,CAEA,cACE,iBAAkB,CAClB,QAAW,CACX,QAAS,CACT,0BAA2B,CAC3B,WAAY,CACZ,WAAY,CACZ,iBAAkB,CAClB,iBAAkB,CAClB,YAAa,CACb,yBAA0B,CAC1B,kBAAmB,CACnB,cAAe,CACf,UAAW,CACX,eAAgB,CAChB,qBACF,CACA,qBACE,YACF,CAEA,gEACE,cACE,WACF,CACF,CAEA,+DACE,cACE,WACF,CACF,CAEA,+DACE,cACE,WACF,CACF,CAEA,yCACE,cACE,SAAU,CACV,mBAAoB,CACpB,gBACF,CACF,CAEA,sBACE,UAAW,CACX,WAAY,CACZ,gEAA4C,CAC5C,iBACF,CAEA,8BACE,wfACF,CAEA,oBACE,cACF,CAEA,cACE,iBAAkB,CAGlB,0BAA2B,CAC3B,aACF,CAEA,SACE,iBACF,CACA,uBACE,WAAY,CACZ,eAAgB,CAChB,gBACF,CACA,aACE,YACF,CAEA,kBAEE,6BAA8B,CAC9B,WACF,CAEA,yCACE,kBACE,SACF,CACF,CAEA,yBACE,YAAa,CACb,iBAAkB,CAClB,KAAM,CACN,OAAQ,CACR,MAAO,CACP,QAAS,CACT,kBAAmB,CACnB,SAAU,CACV,iBACF,CAEA,wBACE,GAEE,mBACF,CACA,GAEE,uBACF,CACF,CAEA,gBACE,GAEE,mBACF,CACA,GAEE,uBACF,CACF,CAEA,kCACE,iBAAkB,CAClB,SAAU,CACV,QAAS,CACT,iBAAkB,CAClB,gBAAiB,CACjB,iBAAkB,CAClB,UAAW,CACX,WAAY,CAEZ,mCAAqC,CAArC,iCAAqC,CACrC,yCAA0C,CAC1C,iCACF,CAEA,WACE,WAAY,CACZ,gBAAiB,CACjB,UAAW,CACX,kBAAmB,CACnB,iBAAkB,CAClB,eAAgB,CAChB,qCAAyC,CACzC,cAAe,CACf,eACF,CAEA,0CACE,qCACE,UACF,CACF,CAEA,gEACE,WACE,WAAY,CACZ,gBACF,CAEA,qCACE,UACF,CACF,CAEA,+DACE,WACE,WAAY,CACZ,gBACF,CAEA,qCACE,UACF,CACF,CAEA,+DACE,WACE,WAAY,CACZ,gBACF,CAEA,qCACE,UACF,CACF,CAEA,qBACE,iBAAkB,CAClB,eAAgB,CAChB,iBAAkB,CAClB,yCACF,CAEA,yCACE,WACE,UAAW,CACX,aACF,CAEA,uCACE,UAAW,CACX,SAAU,CACV,eACF,CACF,CAEA,2BACE,UAAW,CACX,aAAc,CACd,UAAW,CACX,mBAAoB,CACpB,iBACF,CAEA,8BACE,iBAAkB,CAClB,MAAO,CACP,QAAS,CACT,SAAU,CACV,OACF,CAEA,yBACE,iBAAkB,CAClB,KAAM,CACN,OAAQ,CACR,QAAS,CACT,MAAO,CACP,cAAe,CACf,eAAgB,CAChB,WAAY,CACZ,qBACF,CAEA,6BACE,aACF,CAEA,yCACE,+CACE,UAAW,CACX,SAAU,CACV,UAAW,CACX,uCACF,CAEA,UACE,iBACF,CACF,CAEA,yCACE,aACF,CAEA,wCACE,aACF,CAEA,oDACE,eAAgB,CAChB,aACF,CAEA,4CACE,kBACF,CAEA,4CACE,cAAe,CACf,oBAAqB,CACrB,yBAA0B,CAC1B,wBAAyB,CACzB,cAAe,CACf,iBAAkB,CAClB,0FAAsE,CACtE,kCACF,CAEA,oDACE,6XACF,CAEA,kDACE,qFAAiE,CACjE,wBAAyB,CACzB,aACF,CAEA,0DACE,qWACF,CAEA,yCACE,0BACE,SAAU,CACV,aAAc,CACd,gBAAiB,CACjB,UAAW,CACX,iBACF,CAEA,oCACE,UAAW,CACX,SAAU,CACV,eAAgB,CAChB,wCACF,CAEA,4CACE,UAAW,CACX,SAAU,CACV,iBAAkB,CAClB,KAAM,CACN,OAAQ,CACR,QAAS,CACT,QAAS,CACT,UAAW,CAGX,YAAa,CAGb,kBAAmB,CAEnB,cACF,CACF,CAEA,sCACE,sCACF,CAEA,mBACE,kBAAmB,CACnB,cAAe,CACf,uBAA2B,CAC3B,iBACF,CAEA,qBACE,uBAA2B,CAC3B,eACF,CAEA,2BACE,uBACF,CAEA,UACE,cAAe,CACf,OAAQ,CACR,QAAS,CACT,MAAO,CACP,0BAA2B,CAC3B,SAAU,CACV,kBAAmB,CACnB,YAAa,CACb,cAAe,CACf,2BACF,CAEA,mBACE,cACF,CAEA,YACE,oBAAqB,CACrB,iBACF,CAEA,yCACE,YACE,aAAc,CACd,kBACF,CACF,CAEA,eACE,eAAgB,CAChB,iBAAkB,CAClB,oBAAqB,CACrB,WAAY,CACZ,YACF,CAEA,uBACE,cAAe,CACf,2BACF,CAEA,6BACE,kBAAmB,CACnB,oCAAwC,CACxC,UACF,CAEA,yBACE,cACF,CAEA,+BACE,kBAAmB,CACnB,gCAAoC,CACpC,UACF,CAEA,uBACE,eAAgB,CAChB,2BACF,CAEA,6BACE,kBAAmB,CACnB,oCAAwC,CACxC,UACF,CAEA,qBACE,cACF,CAEA,kCACE,iBAAkB,CAClB,KAAM,CACN,OAAQ,CACR,QACF,CAEA,iDACE,iBAAkB,CAClB,UAAW,CACX,OAAQ,CAGR,0BAA2B,CAC3B,UAAW,CACX,WAAY,CACZ,mFAA+D,CAC/D,WAAY,CACZ,WAAY,CAEZ,uBACF,CAEA,uDACE,cAAe,CACf,SACF,CAEA,2BACE,cAAe,CACf,iBAAkB,CAClB,aAAc,CACd,gBACF,CAEA,yCACE,iDACE,UAAW,CACX,QAAS,CAGT,uBACF,CAEA,2BACE,aACF,CACF,CAEA,oEACE,aACF,CAEA,4GACE,aACF,CAEA,0BACE,YAAa,CACb,iBAAkB,CAClB,cAAe,CACf,cAAe,CACf,YAAa,CACb,KAAM,CACN,OAAQ,CACR,QAAS,CACT,MAAO,CACP,UAAW,CACX,kBACF,CAEA,6DACE,aACF,CAWA,YAGE,YAAa,CACb,iBAGF,CAEA,uBARE,sBAAuB,CACvB,eAAgB,CAGhB,kBAAmB,CACnB,cAUF,CAPA,WAGE,YAAa,CACb,iBAGF,CAEA,2BACE,WAAY,CACZ,kBACF,CAEA,UACE,SAAU,CACV,wBAAyB,CACzB,kBAAmB,CACnB,WAAY,CACZ,YAAc,CACd,iBACF,CAEA,SACE,SACF,CAEA,uBACE,oBACF,CAEA,iBACE,aAAc,CACd,iBAAkB,CAClB,UAAW,CACX,WAAY,CACZ,8BAAgC,CAChC,qBAAuB,CACvB,wBAAyB,CACzB,iBAAkB,CAClB,YACF,CAEA,sBACE,iBAAkB,CAClB,yBAA8B,CAC9B,UAAc,CACd,qBAAsB,CACtB,cAAe,CACf,kBACF,CAEA,uBACE,oBAAqB,CACrB,YACF,CAEA,4BACE,WACF,CAEA,yCACE,UACE,cACF,CACF,CAEA,WACE,UAAc,CACd,aAAc,CACd,iBAAkB,CAClB,cACF,CAEA,gBACE,+BAAoC,CACpC,iBACF,CAEA,gBACE,iBAAkB,CAClB,oKAG2C,CAC3C,qDAAyD,CACzD,mDAAuD,CACvD,yCAA+D,CAC/D,iDAA0C,CAA1C,yCACF,CACA,gBACE,iBAAkB,CAClB,yBAA2B,CAC3B,UAAW,CACX,WACF,CACA,sBACE,+BAAkC,CAClC,iBAAkB,CAClB,+BACF,CACA,mBACE,yBAA2B,CAC3B,0BACF,CACA,mBACE,yBAA2B,CAC3B,2BACF,CACA,mBACE,4BAA8B,CAC9B,0BACF,CACA,mBACE,4BAA8B,CAC9B,2BACF,CAEA,gCACE,GACE,+CACF,CACA,GACE,+CACF,CACF,CAPA,wBACE,GACE,+CACF,CACA,GACE,+CACF,CACF,CACA,QAEE,WAAY,CAEZ,4BACF,CACA,mBALE,UAAW,CAEX,wBAOF,CAJA,WAEE,WAEF,CACA,aAGE,YAAa,CAIb,oBAAqB,CAErB,SAAU,CACV,kBAAmB,CAEnB,qBAAsB,CACtB,yBACF,CACA,SACE,OAAQ,CAER,aAAc,CACd,SAAU,CACV,QAAS,CACT,eAAgB,CAIhB,cAAe,CACf,2BAA4B,CAC5B,SACF,CACA,aACE,uBAAsB,CACtB,cAAe,CACf,WACF,CACA,gBACE,WAAY,CACZ,kBAAmB,CAGnB,UACF,CACA,eACE,YAAa,CACb,kBAAmB,CACnB,YACA,CACA,cACC,YAAa,CACb,aAAc,CACd,iBAAkB,CAClB,cAAe,CACf,wBAAiB,CAAjB,qBAAiB,CAAjB,oBAAiB,CAAjB,gBAAiB,CACjB,WAED,CACA,cACA,cAAe,CACf,UAAW,CACX,UAAY,CACZ,eACA,CACA,eACE,YAAa,CACb,qBAAsB,CACtB,aACF,CAEA,2BACA,qCAEA,CACA,qBACA,YAAa,CACb,kBAAmB,CACnB,gBAAiB,CACjB,iBAAkB,CAClB,+BAAiC,CACjC,cACA,CACA,oBACE,UAEF,CACA,kCACE,cACF,CAEF,eACI,YACF,CACA,cACE,UACF,CAEA,WACE,iBACF,CACF,WAAa,oBAAqB,CAAE,YAAa,CAAG,kBAAsB,CAC1E,iBAAmB,qBAAyB,CAC5C,oBAAsB,qBAAsB,CAAE,UAAa","file":"main.2a76dc8a.chunk.css","sourcesContent":["body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n background-color: #031F2B;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n monospace;\n}\n\n#branding, .btn {\n transition: all .2s ease\n}\n\n.headSection, .mainContentWrap {\n overflow: hidden\n}\n\na, abbr, acronym, address, applet, article, aside, audio, b, big, blockquote, body, canvas, caption, center, cite, code, dd, del, details, dfn, div, dl, dt, em, embed, fieldset, figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, header, hgroup, html, i, iframe, img, ins, kbd, label, legend, li, mark, menu, nav, object, ol, output, p, pre, q, ruby, s, samp, section, small, span, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, time, tr, tt, u, ul, var, video {\n font: inherit;\n padding: 0;\n border: 0;\n margin: 0;\n vertical-align: baseline\n}\n\nblockquote, q {\n quotes: none\n}\n\nblockquote:after, blockquote:before, q:after, q:before {\n content: '';\n content: none\n}\n\ntable {\n border-collapse: collapse;\n border-spacing: 0\n}\n\narticle, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {\n display: block\n}\n\n.clear {\n clear: both\n}\n\n.screen-reader-text {\n clip: rect(1px, 1px, 1px, 1px);\n position: absolute !important\n}\n\n.container, .mainContentWrap, article {\n position: relative\n}\n\n* {\n box-sizing: border-box\n}\n\n.wrapper {\n width: 96%;\n max-width: 1200px;\n margin: 0 auto;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1\n}\n\n.fullWidth, .wrapper {\n padding: 4% 0;\n position: relative\n}\n\n.fullWidth.noPadding, .wrapper.noPadding {\n padding: 0\n}\n\n@media only screen and (min-width: 1300px) {\n .fullWidth, .wrapper {\n padding: 2% 0\n }\n}\n\n@media only screen and (min-width: 900px) and (max-width: 1120px) {\n .fullWidth, .wrapper {\n padding: 4% 0\n }\n}\n\n.fullWidth .wrapper, article {\n padding: 0\n}\n\n.flexWrapper {\n align-items: center;\n flex-flow: row wrap;\n flex-direction: row;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex\n}\n\n.flexWrapper.alignTop {\n align-items: flex-start\n}\n\n.tileFlexible {\n margin: 20px 0;\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n float: left\n}\n\n.tileHalf {\n width: 50%;\n float: left\n}\n\n@media only screen and (min-width: 530px) and (max-width: 750px) {\n .tileHalf {\n float: none;\n width: 100%\n }\n}\n\n.tileThird {\n width: 33%;\n float: left\n}\n\n.center {\n text-align: center\n}\n\n.smallerWidth {\n width: 70%;\n display: inline-block\n}\n\n@media only screen and (min-width: 900px) and (max-width: 1120px) {\n .smallerWidth br {\n display: none\n }\n}\n\n@media only screen and (min-width: 750px) and (max-width: 900px) {\n .smallerWidth {\n width: 100%\n }\n}\n\n@media only screen and (max-width: 530px) {\n .onDesktop {\n display: none\n }\n}\n\n.bold, .bold a, .bold div, .bold span {\n font-weight: 700 !important\n}\n\n.disabled, .notAvailableJet {\n pointer-events: none\n}\n\n.disabled:hover, .notAvailableJet:hover {\n cursor: default\n}\n\n.notAvailableJet {\n opacity: .5\n}\n\n.container {\n min-height: 60vh;\n background: #e7eaee;\n background: -webkit-linear-gradient(top, #e7eaee 0, #f0f2f4 100%);\n background: linear-gradient(to bottom, #e7eaee 0, #f0f2f4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e7eaee', endColorstr='#f0f2f4', GradientType=0)\n}\n\n.page-template-template-contact .container {\n min-height: 0\n}\n\n.btn {\n min-width: 200px;\n border-radius: 3px;\n padding: 15px 35px;\n font-size: 14px;\n line-height: 14px;\n text-transform: uppercase;\n display: inline-block;\n text-align: center;\n height: 45px;\n font-weight: 700;\n transition: all .2s ease\n}\n\n.hide, .oldBrowserHint {\n display: none\n}\n\n.btn.primary {\n background: #4C8F9F;\n color: #fff\n}\n\n.btn.primary:hover {\n cursor: pointer;\n opacity: .8\n}\n\n.btn.withShadow {\n box-shadow: 0 19px 25px -17px rgba(0, 0, 0, .3)\n}\n\n.btn.withShadow:hover {\n opacity: .8\n}\n\n.btn.withShadow:active {\n -webkit-transition: all 50ms cubic-bezier(.54, .03, .42, .99);\n transition: all 50ms cubic-bezier(.54, .03, .42, .99);\n -webkit-transform: translateY(1px);\n -ms-transform: translateY(1px);\n transform: translateY(1px);\n box-shadow: 0 17px 22px -15px rgba(0, 0, 0, .2)\n}\n\n.no-borderradius .oldBrowserHint, .no-opacity .oldBrowserHint {\n text-align: center;\n padding: 20% 5%;\n position: fixed;\n z-index: 9999;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n color: #fff;\n background: #031F2B\n}\n\n@font-face {\n font-family: Roboto;\n src: local(\"Roboto Italic\"), local(\"Roboto-Italic\"), url(fonts/roboto-italic-webfont.woff2) format(\"woff2\"), url(fonts/roboto-italic-webfont.woff) format(\"woff\");\n font-weight: 400;\n font-style: italic\n}\n\n@font-face {\n font-family: Roboto;\n src: local(\"Roboto Bold\"), local(\"Roboto-Bold\"), url(fonts/roboto-bold-webfont.woff2) format(\"woff2\"), url(fonts/roboto-bold-webfont.woff) format(\"woff\");\n font-weight: 700;\n font-style: normal\n}\n\n@font-face {\n font-family: Roboto;\n src: local(\"Roboto Regular\"), local(\"Roboto-Regular\"), url(fonts/roboto-regular-webfont.woff2) format(\"woff2\"), url(fonts/roboto-regular-webfont.woff) format(\"woff\");\n font-weight: 400;\n font-style: normal\n}\n\n@font-face {\n font-family: \"Roboto Condensed\";\n src: local(\"Roboto Condensed Bold\"), local(\"RobotoCondensed-Bold\"), url(fonts/robotocondensed-bold-webfont.woff2) format(\"woff2\"), url(fonts/robotocondensed-bold-webfont.woff) format(\"woff\");\n font-weight: 700;\n font-style: normal\n}\n\n@font-face {\n font-family: \"Roboto Condensed\";\n src: local(\"Roboto Condensed Bold Italic\"), local(\"RobotoCondensed-BoldItalic\"), url(fonts/robotocondensed-bolditalic-webfont.woff2) format(\"woff2\"), url(fonts/robotocondensed-bolditalic-webfont.woff) format(\"woff\");\n font-weight: 700;\n font-style: italic\n}\n\nbody, button, input, select, textarea {\n color: rgba(3, 31, 43, .54);\n font-family: Roboto, Arial, Helvetica, sans-serif;\n font-size: 17px;\n line-height: 1.5;\n font-weight: 400;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale\n}\n\na, b, h1, h2, h3, h4, h5, h6, strong {\n font-weight: 700\n}\n\nbody {\n background: #e7eaee\n}\n\nh1, h2, h3, h4, h5, h6 {\n line-height: 1\n}\n\nh1, h2 {\n line-height: 1.618;\n color: #031F2B\n}\n\nh1 {\n font-size: 25px;\n margin: 0 auto 25px\n}\n\nh1.entry-title a {\n color: #031F2B;\n font-size: 25px\n}\n\nh2 {\n font-size: 16px;\n margin: 15px auto 25px\n}\n\nh2.entry-title a {\n color: #031F2B;\n font-size: 25px\n}\n\nh1 p, h2 p {\n margin-bottom: 0\n}\n\n@media only screen and (min-width: 530px) and (max-width: 750px) {\n h1 br, h2 br {\n display: none\n }\n}\n\nh3 {\n color: #031F2B;\n font-size: 17px;\n line-height: 1.5;\n margin: 22px auto 16px\n}\n\nh4 {\n font-size: 15px;\n margin: 22px auto 12px\n}\n\nh5 {\n font-size: 13px;\n margin: 22px auto 10px\n}\n\nh6 {\n font-size: 11px;\n margin: 22px auto 8px\n}\n\np {\n margin-bottom: 16px\n}\n\np a {\n text-decoration: underline\n}\n\nem {\n font-style: italic\n}\n\niframe, img {\n max-width: 100%;\n height: auto\n}\n\na {\n text-decoration: none;\n color: rgba(3, 31, 43, .54)\n}\n\na:hover {\n cursor: pointer;\n color: rgba(3, 31, 43, .7)\n}\n\nol, ul {\n list-style: none;\n padding-left: 20px\n}\n\nol li, ul li {\n list-style: disc;\n padding-left: 10px;\n margin-bottom: 10px\n}\n\n.alignnone {\n margin: 5px 20px 20px 0\n}\n\n.aligncenter, div.aligncenter {\n display: block;\n margin: 5px auto\n}\n\n.alignright {\n float: right;\n margin: 5px 0 20px 20px\n}\n\n.alignleft {\n float: left;\n margin: 5px 20px 20px 0\n}\n\na img.alignright {\n float: right;\n margin: 5px 0 20px 20px\n}\n\na img.alignleft, a img.alignnone {\n margin: 5px 20px 20px 0\n}\n\na img.alignleft {\n float: left\n}\n\na img.aligncenter {\n display: block;\n margin-left: auto;\n margin-right: auto\n}\n\n.wp-caption {\n background: #FFF;\n border: 1px solid #F0F0F0;\n max-width: 96%;\n padding: 5px 3px 10px;\n text-align: center\n}\n\n.wp-caption.alignleft, .wp-caption.alignnone {\n margin: 5px 20px 20px 0\n}\n\n.wp-caption.alignright {\n margin: 5px 0 20px 20px\n}\n\n.wp-caption img {\n border: 0;\n height: auto;\n margin: 0;\n max-width: 98.5%;\n padding: 0;\n width: auto\n}\n\n.gallery-caption, .wp-caption .wp-caption-text {\n font-size: 11px;\n line-height: 17px;\n margin: 0;\n padding: 0 4px 5px\n}\n\n@media print {\n blockquote, img, pre, tr {\n page-break-inside: avoid\n }\n\n * {\n background: 0 0 !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important\n }\n\n a, a:visited {\n text-decoration: underline\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\"\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\"\n }\n\n .ir a:after, a[href^=\"javascript:\"]:after, a[href^=\"#\"]:after {\n content: \"\"\n }\n\n blockquote, pre {\n border: 1px solid #999\n }\n\n thead {\n display: table-header-group\n }\n\n img {\n max-width: 100% !important\n }\n\n @page {\n margin: .5cm\n }\n\n h2, h3, p {\n orphans: 3;\n widows: 3\n }\n\n h2, h3 {\n page-break-after: avoid\n }\n}\n\n.headerSeparatorBack, .headerSeparatorTop {\n position: absolute;\n right: 0;\n bottom: -2px;\n left: 0;\n width: 100%;\n height: 61px;\n z-index: 9996;\n background: url(images/sectionTransBack.svg) 0 bottom repeat-x\n}\n\n.no-svg .headerSeparatorBack, .no-svg .headerSeparatorTop {\n background: url(images/sectionTransBack.png) 0 bottom repeat-x\n}\n\n.headerSeparatorTop {\n height: 30px;\n z-index: 9999;\n background: url(images/sectionTransTop.svg) 0 bottom repeat-x\n}\n\n.no-svg .headerSeparatorTop {\n background: url(images/sectionTransTop.png) 0 bottom repeat-x\n}\n\n.headSection {\n position: absolute;\n width: 100%;\n height: 90vh;\n height: -webkit-calc(100vh - 30px);\n height: calc(100vh - 30px);\n background: #031F2B;\n transition: height 300ms;\n}\n\n.headSection.hidden {\n height: 110px;\n\n}\n\n@media only screen and (max-width: 530px) {\n .headSection {\n min-height: 146px\n }\n}\n\n.headSection .wrapper {\n padding: 0;\n -webkit-box-flex: 0;\n -ms-flex: 0;\n flex: 0;\n}\n\n.navWrap {\n width: 100%;\n height: 100px;\n position: absolute;\n z-index: 9996;\n border-bottom: 4px solid rgba(255, 255, 255, .12);\n}\n\n.contentWrap, .uploadImage {\n position: relative;\n width: 65%\n}\n\n.menuWrap {\n float: right;\n z-index: 1\n}\n\n.menuWrap ul {\n margin: 0;\n padding: 17px 0 0\n}\n\n.menuWrap ul li {\n float: left;\n list-style: none;\n margin: 0;\n padding: 0\n}\n\n.menuWrap ul li a {\n color: rgba(255, 255, 255, .54);\n padding: 7px 0 7px 10px;\n font-size: 11px;\n display: inline-block\n}\n\n.menuWrap ul li a:hover {\n color: #fff\n}\n\n#branding {\n float: left;\n width: 93px;\n height: 60px;\n min-height: 0;\n background: url(images/nyris_logo.png) 50% 50% no-repeat;\n overflow: hidden;\n text-indent: -99999px;\n transition: all .2s ease\n}\n\n.resultsActive #branding {\n opacity: .54\n}\n\n.dragAndDropActionArea {\n height: 90vh;\n padding-bottom: 80px;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n margin-left: 35px;\n margin-top: 50px;\n}\n.dragAndDropActionArea:focus {\n outline: 0;\n}\n\n.contentWrap {\n -webkit-box-flex: 1;\n -ms-flex: 1 100%;\n flex: 1 100%;\n overflow: hidden\n}\n\n.uploadImage {\n min-height: 120px;\n border-radius: 12px;\n border: 4px dashed rgba(255, 255, 255, .12);\n padding: 12vh 0;\n text-align: center;\n font-size: 22px;\n color: rgba(251, 253, 254, .54);\n display: block;\n -webkit-transition: all .2s ease;\n transition: all .2s ease\n}\n\n@media only screen and (max-height: 610px) {\n .uploadImage {\n padding: 30px 0\n }\n}\n\n@media only screen and (max-width: 530px) {\n .uploadImage {\n padding: 10vh 0;\n border: 0;\n height: 70vh\n }\n}\n\n.uploadImage .smallText {\n font-size: 14px;\n color: rgba(251, 253, 254, .38);\n margin: 8px auto 17px\n}\n\n.fileIsHover .uploadImage {\n border: 4px dashed rgba(255, 255, 255, .38)\n}\n\n.mobileUploadHandler {\n position: absolute;\n width: 100%;\n display: block;\n top: 70px;\n right: 0;\n height: 100px;\n left: 0\n}\n\n.inputfile {\n width: .1px;\n height: .1px;\n opacity: 0;\n overflow: hidden;\n position: absolute;\n z-index: -1\n}\n\n.useExampleImg {\n color: rgba(255, 255, 255, .38);\n font-size: 14px;\n margin-top: 30px\n}\n\n@media only screen and (max-width: 530px) {\n .fileIsHover .uploadImage {\n border: 0\n }\n\n .useExampleImg {\n position: absolute;\n bottom: -20px;\n width: 102%\n }\n}\n\n.useExampleImg .exampleImages {\n margin-top: 10px;\n width: 100%;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n padding-bottom: 20px\n}\n\n.useExampleImg .exampleImages .exImagesWrap {\n white-space: nowrap\n}\n\n.useExampleImg .exampleImages img {\n opacity: .54;\n width: 86px;\n height: 86px;\n border-radius: 3px;\n margin-right: 4px;\n vertical-align: bottom\n}\n\n.useExampleImg .exampleImages img:hover {\n cursor: pointer;\n opacity: 1\n}\n\n.camIcon {\n margin-bottom: 15px\n}\n\n@media (pointer:fine) {\n .onMobile {\n display: none\n }\n}\n\n@media (pointer:none) or (pointer:coarse) {\n .onDesktop {\n display: none\n }\n}\n\n.tryDifferent .icIcon, .tryDifferent .textDesc {\n display: inline-block;\n vertical-align: top\n}\n\n.tryDifferent {\n position: absolute;\n bottom: 0px;\n left: 45%;\n transform: translateX(-50%);\n width: 18.5%;\n height: 90px;\n text-align: center;\n padding: 25px 15px;\n z-index: 9997;\n border-radius: 3px 3px 0 0;\n background: #4C8F9F;\n font-size: 14px;\n color: #fff;\n max-width: 240px;\n transition: bottom 500ms;\n}\n.tryDifferent.hidden {\n bottom: -80px;\n}\n\n@media only screen and (min-width: 900px) and (max-width: 1120px) {\n .tryDifferent {\n width: 23.5%\n }\n}\n\n@media only screen and (min-width: 750px) and (max-width: 900px) {\n .tryDifferent {\n width: 31.8%\n }\n}\n\n@media only screen and (min-width: 530px) and (max-width: 750px) {\n .tryDifferent {\n width: 48.5%\n }\n}\n\n@media only screen and (max-width: 530px) {\n .tryDifferent {\n width: 80%;\n margin-bottom: -13px;\n padding-top: 20px\n }\n}\n\n.tryDifferent .icIcon {\n width: 22px;\n height: 18px;\n background: url(images/ic_cam.svg) no-repeat;\n margin-right: 10px\n}\n\n.no-svg .tryDifferent .icIcon {\n background: url(images/ic_cam.png) no-repeat\n}\n\n.tryDifferent:hover {\n cursor: pointer\n}\n\n.resultsTitle {\n text-align: center;\n -webkit-transform: translateY(20px);\n -ms-transform: translateY(20px);\n transform: translateY(20px);\n margin-top: 3%\n}\n\n.results {\n position: relative;\n}\n.results.resultsActive {\n height: auto;\n min-height: 90vh;\n margin-top: 100px;\n}\n.hideResults{\n display: none;\n}\n\n.results .wrapper {\n max-width: -webkit-calc(1200px + 1.5%);\n max-width: calc(1200px + 1.5%);\n width: 97.5%;\n}\n\n@media only screen and (max-width: 530px) {\n .results .wrapper {\n width: 96%\n }\n}\n\n.results .loadingOverlay {\n padding: 30px;\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n background: #e7eaee;\n z-index: 3;\n border-radius: 3px\n}\n\n@-webkit-keyframes spin {\n 0% {\n -webkit-transform: rotate(0);\n transform: rotate(0)\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg)\n }\n}\n\n@keyframes spin {\n 0% {\n -webkit-transform: rotate(0);\n transform: rotate(0)\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg)\n }\n}\n\n.results .loadingOverlay .loading {\n position: absolute;\n top: 150px;\n left: 50%;\n margin-left: -12px;\n margin-top: -12px;\n border-radius: 50%;\n width: 24px;\n height: 24px;\n border: .25rem solid rgba(0, 0, 0, .12);\n border-top-color: rgba(3, 31, 43, .6);\n -webkit-animation: spin 1s infinite linear;\n animation: spin 1s infinite linear\n}\n\n.prdctItem {\n width: 18.5%;\n margin: 0 .75% 2%;\n float: left;\n background: #FBFDFE;\n border-radius: 3px;\n overflow: hidden;\n box-shadow: 0 1px 3px rgba(3, 31, 43, .2);\n font-size: 14px;\n line-height: 1.3\n}\n\n@media only screen and (min-width: 1120px) {\n .prdctItem:visible:nth-of-type(5n+6) {\n clear: both\n }\n}\n\n@media only screen and (min-width: 900px) and (max-width: 1120px) {\n .prdctItem {\n width: 23.5%;\n margin: 0 .75% 3%\n }\n\n .prdctItem:visible:nth-of-type(4n+5) {\n clear: both\n }\n}\n\n@media only screen and (min-width: 750px) and (max-width: 900px) {\n .prdctItem {\n width: 31.8%;\n margin: 0 .75% 3%\n }\n\n .prdctItem:visible:nth-of-type(3n+4) {\n clear: both\n }\n}\n\n@media only screen and (min-width: 530px) and (max-width: 750px) {\n .prdctItem {\n width: 48.5%;\n margin: 0 .75% 3%\n }\n\n .prdctItem:visible:nth-of-type(2n+3) {\n clear: both\n }\n}\n\n.prdctItem .prdctImg {\n position: relative;\n background: #fff;\n text-align: center;\n border-bottom: 1px solid rgba(3, 31, 43, .12)\n}\n\n@media only screen and (max-width: 530px) {\n .prdctItem {\n width: 100%;\n margin: 0 0 4%\n }\n\n .multipleProducts .prdctItem .prdctImg {\n float: left;\n width: 25%;\n border-bottom: 0\n }\n}\n\n.prdctItem .prdctImg:after {\n content: \"\";\n display: block;\n width: 100%;\n padding-bottom: 100%;\n position: relative\n}\n\n.prdctItem .prdctImg .imgWrap {\n position: absolute;\n top: 9%;\n right: 9%;\n bottom: 9%;\n left: 9%\n}\n\n.prdctItem .prdctImg img {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n max-width: 100%;\n max-height: 100%;\n margin: auto;\n vertical-align: middle\n}\n\n.prdctItem .prdctDetailsWrap {\n padding: 8% 9%\n}\n\n@media only screen and (max-width: 530px) {\n .multipleProducts .prdctItem .prdctDetailsWrap {\n float: left;\n width: 75%;\n padding: 4%;\n border-left: 1px solid rgba(3, 31, 43, .12)\n }\n\n .feedback {\n text-align: center\n }\n}\n\n.prdctItem .prdctDetailsWrap .prdctTitle {\n color: #031F2B\n}\n\n.prdctItem .prdctDetailsWrap .prdctMeta {\n margin: 10px 0\n}\n\n.prdctItem .prdctDetailsWrap .prdctMeta .prdctPrice {\n font-weight: 700;\n color: #031F2B\n}\n\n.prdctItem .prdctDetailsWrap .prdctShipping {\n margin-bottom: 10px\n}\n\n.prdctItem .prdctDetailsWrap .prdctShopLink {\n margin-top: 3px;\n display: inline-block;\n padding: 7px 10px 7px 30px;\n text-transform: uppercase;\n font-size: 13px;\n border-radius: 3px;\n background: url(images/ic_shopNowLight.svg) 10px 50% no-repeat #FBFDFE;\n border: 1px solid rgba(3, 31, 43, .12)\n}\n\n.no-svg .prdctItem .prdctDetailsWrap .prdctShopLink {\n background: url(images/ic_shopNowLight.png) 10px 50% no-repeat #FBFDFE\n}\n\n.prdctItem .prdctDetailsWrap .prdctShopLink:hover {\n background: url(images/ic_shopNow.svg) 10px 50% no-repeat #4C8F9F;\n border: 1px solid #4c8f9f;\n color: #FBFDFE\n}\n\n.no-svg .prdctItem .prdctDetailsWrap .prdctShopLink:hover {\n background: url(images/ic_shopNow.png) 10px 50% no-repeat #4C8F9F\n}\n\n@media only screen and (min-width: 530px) {\n .singleProduct .prdctItem {\n width: 50%;\n display: block;\n margin: 0 auto 4%;\n float: none;\n position: relative\n }\n\n .singleProduct .prdctItem .prdctImg {\n float: left;\n width: 50%;\n border-bottom: 0;\n border-right: 1px solid rgba(3, 31, 43, .12)\n }\n\n .singleProduct .prdctItem .prdctDetailsWrap {\n float: left;\n width: 50%;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 50%;\n padding: 4%;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap\n }\n}\n\n.feedback .btn, .feedback .btn.primary {\n border: 1px solid rgba(251, 253, 254, .12)\n}\n\n.footnote .wrapper {\n padding: 30px 0 6px;\n font-size: 12px;\n color: rgba(3, 31, 43, .38);\n text-align: center\n}\n\n.footnote .wrapper a {\n color: rgba(3, 31, 43, .38);\n font-weight: 400\n}\n\n.footnote .wrapper a:hover {\n color: rgba(3, 31, 43, .54)\n}\n\n.feedback {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n transform: translateY(100%);\n opacity: 0;\n background: #031F2B;\n z-index: 9999;\n font-size: 14px;\n color: rgba(251, 253, 254, .54)\n}\n\n.feedback .wrapper {\n padding: 15px 0\n}\n\n.feedback p {\n display: inline-block;\n margin: 0 10px 0 0\n}\n\n@media only screen and (max-width: 530px) {\n .feedback p {\n display: block;\n margin-bottom: 15px\n }\n}\n\n.feedback .btn {\n min-width: 100px;\n padding: 10px 25px;\n display: inline-block;\n height: auto;\n margin: 0 4px\n}\n\n.feedback .btn.primary {\n background: 0 0;\n color: rgba(251, 253, 254, .54)\n}\n\n.feedback .btn.primary:hover {\n background: #4c8f9f;\n border: 1px solid rgba(251, 253, 254, 0);\n color: #fff\n}\n\n.feedback .btn.secondary {\n background: 0 0\n}\n\n.feedback .btn.secondary:hover {\n background: #E31B5D;\n border: 1px solid rgba(3, 31, 43, 0);\n color: #fff\n}\n\n.feedback .btn.dismiss {\n margin-top: 15px;\n color: rgba(251, 253, 254, .54)\n}\n\n.feedback .btn.dismiss:hover {\n background: #4c8f9f;\n border: 1px solid rgba(251, 253, 254, 0);\n color: #fff\n}\n\n.feedback .btn:hover {\n cursor: pointer\n}\n\n.feedback .closeFeedbackContainer {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0\n}\n\n.feedback .closeFeedbackContainer .closeFeedback {\n position: absolute;\n right: 15px;\n top: 50%;\n -webkit-transform: translateY(-50%);\n -ms-transform: translateY(-50%);\n transform: translateY(-50%);\n width: 30px;\n height: 30px;\n background: url(images/ic_close_feedback.svg) 50% 50% no-repeat;\n float: right;\n opacity: .38;\n -webkit-transition: all .2s ease;\n transition: all .2s ease\n}\n\n.feedback .closeFeedbackContainer .closeFeedback:hover {\n cursor: pointer;\n opacity: 1\n}\n\n.feedback .feedbackMessage {\n font-size: 17px;\n text-align: center;\n max-width: 80%;\n margin: 15px auto;\n}\n\n@media only screen and (max-width: 530px) {\n .feedback .closeFeedbackContainer .closeFeedback {\n width: 18px;\n top: 10px;\n -webkit-transform: translateY(0);\n -ms-transform: translateY(0);\n transform: translateY(0)\n }\n\n .feedback .feedbackMessage {\n max-width: 95%\n }\n}\n\n.feedback .feedbackMessage span, .feedback .feedbackMessage.positive {\n color: #4C8F9F\n}\n\n.negativeFeedback .feedback .feedbackMessage.negative, .positiveFeedback .feedback .feedbackMessage.positive {\n display: block\n}\n\n.noscript, .oldBrowserHint {\n display: none;\n text-align: center;\n padding: 20% 5%;\n position: fixed;\n z-index: 9999;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n color: #fff;\n background: #031F2B\n}\n\n.no-borderradius .oldBrowserHint, .no-opacity .oldBrowserHint {\n display: block\n}\n\n.prdctTitle {\n text-overflow: ellipsis;\n overflow: hidden;\n height: 1.3em;\n line-height: 1.3em;\n white-space: nowrap;\n max-width: 100%;\n}\n\n.prdctTitle {\n text-overflow: ellipsis;\n overflow: hidden;\n height: 1.3em;\n line-height: 1.3em;\n white-space: nowrap;\n max-width: 100%;\n}\n\n.prdctMeta {\n text-overflow: ellipsis;\n overflow: hidden;\n height: 1.2em;\n line-height: 1.2em;\n white-space: nowrap;\n max-width: 100%;\n}\n\n.singleProduct .prdctTitle {\n height: auto;\n white-space: normal;\n}\n\n.errorMsg {\n color: red;\n background-color: #4f4f4f;\n border-radius: 10px;\n margin: auto;\n padding: 0.2em;\n text-align: center;\n}\n\n.preview {\n z-index: 4;\n}\n\n.preview .jcrop-holder {\n display: inline-block;\n}\n\n.preview .circle {\n display: block;\n border-radius: 50%;\n width: 18px;\n height: 18px;\n transform: translate(-9px, -9px);\n background-color: white;\n border: 6px solid #4C8F9F;\n position: absolute;\n z-index: 4000;\n}\n\n.preview .circle span {\n position: absolute;\n background: rgba(0, 0, 0, 0.7);\n color: #FFFFFF;\n font-family: monospace;\n font-size: 10px;\n white-space: nowrap;\n}\n\n.preview .circle:hover {\n border-color: #5ed6e6;\n z-index: 4001;\n}\n\n.preview .circle:hover span {\n color: green;\n}\n\n@media only screen and (max-width: 500px) {\n .feedback {\n font-size: 10px;\n }\n}\n\n.noResults {\n color: #999999;\n font-size: 3em;\n text-align: center;\n cursor: default;\n}\n\n.selection_mask {\n background-color: rgba(0, 0, 0, 0.5);\n position: absolute;\n}\n\n.selection_rect {\n position: absolute;\n background: linear-gradient(90deg, black 50%, white 50%),\n linear-gradient(0deg, black 50%, white 50%),\n linear-gradient(90deg, black 50%, white 50%),\n linear-gradient(0deg, black 50%, white 50%);\n background-repeat: repeat-x, repeat-y, repeat-x, repeat-y;\n background-size: 15px 2px, 2px 15px, 15px 2px, 2px 15px;\n background-position: left top, right top, left bottom, left top;\n animation: border-dance 8s infinite linear;\n}\n.selection_grip {\n position: absolute;\n background: rgba(0,0,0,0.2);\n width: 40px;\n height: 40px;\n}\n.selection_grip:hover {\n transition: background-color 100ms;\n position: absolute;\n background-color: rgba(0,0,0,0.5);\n}\n.selection_grip.tl {\n border-top: 5px solid black;\n border-left: 5px solid black;\n}\n.selection_grip.tr {\n border-top: 5px solid black;\n border-right: 5px solid black;\n}\n.selection_grip.bl {\n border-bottom: 5px solid black;\n border-left: 5px solid black;\n}\n.selection_grip.br {\n border-bottom: 5px solid black;\n border-right: 5px solid black;\n}\n\n@keyframes border-dance {\n 0% {\n background-position: left top, right top, right bottom, left bottom;\n }\n 100% {\n background-position: right top, right bottom, left bottom, left top;\n }\n}\n#header {\n width: 100%;\n height: 60px;\n background-color: #031F2B;\n border-bottom: 1px solid #eee;;\n}\n.sideBelow {\n width: 100%;\n height: 100%;\n background-color: #031F2B;\n}\n.wrapperBody {\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n\n -webkit-flex-flow: row nowrap;\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n \n padding: 0;\n background: #031F2B;\n \n -ms-flex-pack: justify;\n height: calc( 100vh - 60px);\n}\n.sidebar {\n order: 0;\n \n display: block;\n padding: 0;\n margin: 0;\n background: #bbb;\n \n -webkit-flex: 0 0 329px;\n -ms-flex: 0 0 329px;\n flex: 0 0 240px;\n border-right: 1px solid #eee;\n width: 25%;\n}\n.mainContent{\n width: calc(100vh-230);\n flex: 0 0 900px;\n flex-grow: 1;\n}\n.sidebarContent {\n height: 100%;\n background: #031F2B;\n /* margin: 10px;\n border: 1px solid #dfdfdf; */\n color: white;\n}\n.sidebarHeader{\n display: flex;\n align-items: center;\n padding: 16px;\n }\n .sidebar-icon{\n width: 1.25em;\n height: 1.25em;\n margin-right: 16px;\n cursor: pointer;\n user-select: none;\n float: right;\n\n }\n .sidebar-logo{\n font-size: 16px;\n float: left;\n color: white;\n margin-top: 27px;\n }\n .Sidebar-items{\n display: flex;\n flex-direction: column;\n padding: 0 8px;\n }\n \n .Sidebar-items .item:hover{\n background-color: rgba(246, 242, 242, 0.1);\n \n }\n .Sidebar-items .item{\n display: flex;\n align-items: center;\n padding: 16px 8px;\n border-radius: 5px;\n transition: background-color 0.2s;\n cursor: pointer;\n }\n .sidebar .collapsed{\n width: 20px;\n\n }\n .sidebar .collapsed .sidebar-icon{\n margin-right: 0;\n }\n \n.collapsedHide {\n display: none;\n }\n .sidebar-text{\n color: white;\n }\n\n .itemLabel{\n padding-left: 10px;\n }\n#catlist a { display: inline-block; padding: 10px; border-radius: 10px; }\n#catlist a:hover { background-color: white; }\n#catlist a.selected { background-color: #444; color: #ddd; }"]}