cob-cli 2.8.1 → 2.12.0

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.
Files changed (91) hide show
  1. package/customizations/dashboard.dash.js +11 -0
  2. package/customizations/dashboard.js +1 -0
  3. package/customizations/dashboard.simple.js +1 -1
  4. package/customizations/dashboard.vue.empty.js +1 -1
  5. package/customizations/frontend.easy.js +16 -0
  6. package/lib/task_lists/customize_copy.js +7 -6
  7. package/package.json +1 -1
  8. package/templates/{cob-dashboard-html → dashboards/cob-dashboard-html}/demoDashboard.html +0 -0
  9. package/templates/{cob-dashboard-vue → dashboards/cob-dashboard-vue}/package-lock.json +0 -0
  10. package/templates/{cob-dashboard-vue → dashboards/cob-dashboard-vue}/package.json +0 -0
  11. package/templates/{cob-dashboard-vue → dashboards/cob-dashboard-vue}/src/App.vue +0 -0
  12. package/templates/{cob-dashboard-vue → dashboards/cob-dashboard-vue}/src/dashboard.html +0 -0
  13. package/templates/{cob-dashboard-vue → dashboards/cob-dashboard-vue}/src/main.js +0 -0
  14. package/templates/{cob-dashboard-vue → dashboards/cob-dashboard-vue}/src/plugins/cobUiVueComponents.js +0 -0
  15. package/templates/{cob-dashboard-vue → dashboards/cob-dashboard-vue}/src/plugins/vuetify.js +0 -0
  16. package/templates/{cob-dashboard-vue → dashboards/cob-dashboard-vue}/vue.config.js +0 -0
  17. package/templates/dashboards/dash/dist/css/app.2ca409ad.css +8 -0
  18. package/templates/dashboards/dash/dist/dashboard.html +20 -0
  19. package/templates/dashboards/dash/dist/fonts/fa-brands-400.a78ffbbe.ttf +0 -0
  20. package/templates/dashboards/dash/dist/fonts/fa-brands-400.cd2b4095.woff2 +0 -0
  21. package/templates/dashboards/dash/dist/fonts/fa-regular-400.b1a1bebb.ttf +0 -0
  22. package/templates/dashboards/dash/dist/fonts/fa-regular-400.e8a1ba41.woff2 +0 -0
  23. package/templates/dashboards/dash/dist/fonts/fa-solid-900.55b416a8.woff2 +0 -0
  24. package/templates/dashboards/dash/dist/fonts/fa-solid-900.73820155.ttf +0 -0
  25. package/templates/dashboards/dash/dist/fonts/fa-v4compatibility.0d6f5f18.ttf +0 -0
  26. package/templates/dashboards/dash/dist/fonts/fa-v4compatibility.786e6b33.woff2 +0 -0
  27. package/templates/dashboards/dash/dist/js/app.a65a4c2c.js +188 -0
  28. package/templates/dashboards/dash/dist/js/app.a65a4c2c.js.map +1 -0
  29. package/templates/dashboards/dash/package-lock.json +24340 -0
  30. package/templates/dashboards/dash/package.json +19 -0
  31. package/templates/dashboards/dash/src/App.vue +257 -0
  32. package/templates/dashboards/dash/src/Dashboard.vue +46 -0
  33. package/templates/dashboards/dash/src/assets/css/all.min.css +6 -0
  34. package/templates/dashboards/dash/src/assets/webfonts/fa-brands-400.ttf +0 -0
  35. package/templates/dashboards/dash/src/assets/webfonts/fa-brands-400.woff2 +0 -0
  36. package/templates/dashboards/dash/src/assets/webfonts/fa-regular-400.ttf +0 -0
  37. package/templates/dashboards/dash/src/assets/webfonts/fa-regular-400.woff2 +0 -0
  38. package/templates/dashboards/dash/src/assets/webfonts/fa-solid-900.ttf +0 -0
  39. package/templates/dashboards/dash/src/assets/webfonts/fa-solid-900.woff2 +0 -0
  40. package/templates/dashboards/dash/src/assets/webfonts/fa-v4compatibility.ttf +0 -0
  41. package/templates/dashboards/dash/src/assets/webfonts/fa-v4compatibility.woff2 +0 -0
  42. package/templates/dashboards/dash/src/collector.js +3782 -0
  43. package/templates/dashboards/dash/src/components/Board.vue +61 -0
  44. package/templates/dashboards/dash/src/components/BoardsNav.vue +23 -0
  45. package/templates/dashboards/dash/src/components/BoardsPage.vue +36 -0
  46. package/templates/dashboards/dash/src/components/Menu.vue +19 -0
  47. package/templates/dashboards/dash/src/components/Title.vue +13 -0
  48. package/templates/dashboards/dash/src/components/Totals.vue +53 -0
  49. package/templates/dashboards/dash/src/components/TotalsBadge.vue +69 -0
  50. package/templates/dashboards/dash/src/dashboard.html +34 -0
  51. package/templates/dashboards/dash/src/definition_dashboard_v59.json +394 -0
  52. package/templates/dashboards/dash/src/input.css +9 -0
  53. package/templates/dashboards/dash/src/main.js +11 -0
  54. package/templates/dashboards/dash/src/output.css +135974 -0
  55. package/templates/dashboards/dash/tailwind.config.js +19 -0
  56. package/templates/dashboards/dash/vue.config.js +104 -0
  57. package/templates/frontend/common/css/_dashboard.css +7 -0
  58. package/templates/frontend/common/css/_global.css +3 -2
  59. package/templates/frontend/easy/css/_easy/googlefonts.css +360 -0
  60. package/templates/frontend/easy/css/_easy/vuetify.cob-scoped.css +10488 -0
  61. package/templates/frontend/easy/js/_easy/lib/axios.min.js +9 -0
  62. package/templates/frontend/easy/js/_easy/lib/marked.min.js +6 -0
  63. package/templates/frontend/easy/js/_easy/lib/vue.js +11912 -0
  64. package/templates/frontend/easy/js/_easy/lib/vue.min.js +6 -0
  65. package/templates/frontend/easy/js/_easy/lib/vuetify.min.js +6 -0
  66. package/templates/frontend/easy/js/customizations2.__MERGE__.js +22 -0
  67. package/templates/frontend/easy/webapp/.browserslistrc +2 -0
  68. package/templates/frontend/easy/webapp/.eslintrc.js +17 -0
  69. package/templates/frontend/easy/webapp/README.md +60 -0
  70. package/templates/frontend/easy/webapp/babel.config.js +5 -0
  71. package/templates/frontend/easy/webapp/dist/css/app.a4fb91f8.css +1 -0
  72. package/templates/frontend/easy/webapp/dist/dashboard.html +13 -0
  73. package/templates/frontend/easy/webapp/dist/js/app.63a57dcd.js +2 -0
  74. package/templates/frontend/easy/webapp/dist/js/app.63a57dcd.js.map +1 -0
  75. package/templates/frontend/easy/webapp/package-lock.json +32986 -0
  76. package/templates/frontend/easy/webapp/package.json +32 -0
  77. package/templates/frontend/easy/webapp/postcss.config.js +5 -0
  78. package/templates/frontend/easy/webapp/public/dashboard.html +13 -0
  79. package/templates/frontend/easy/webapp/src/App.vue +181 -0
  80. package/templates/frontend/easy/webapp/src/assets/logo.png +0 -0
  81. package/templates/frontend/easy/webapp/src/components/HelloWorld.vue +59 -0
  82. package/templates/frontend/easy/webapp/src/components/PermBuilder.vue +163 -0
  83. package/templates/frontend/easy/webapp/src/components/PlanExecutor.vue +225 -0
  84. package/templates/frontend/easy/webapp/src/components/ProductPermBuilder.vue +95 -0
  85. package/templates/frontend/easy/webapp/src/components/RmDefinitionChooser.vue +59 -0
  86. package/templates/frontend/easy/webapp/src/components/RmDomainChooser.vue +60 -0
  87. package/templates/frontend/easy/webapp/src/components/RoleBuilder.vue +73 -0
  88. package/templates/frontend/easy/webapp/src/main.js +19 -0
  89. package/templates/frontend/easy/webapp/src/perm-templates.js +189 -0
  90. package/templates/frontend/easy/webapp/src/perms.js +197 -0
  91. package/templates/frontend/easy/webapp/vue.config.js +66 -0
@@ -0,0 +1,19 @@
1
+ module.exports = {
2
+ content: ["./src/**/*.{html,js,vue}", "./src/*.{html,js,vue}"],
3
+ theme: {
4
+ extend: {
5
+ colors: {
6
+ 'cobbg': '#fda1e004',
7
+ 'cobline': '#cdcac4',
8
+ 'error': 'rgb(239 68 68)'
9
+ },
10
+ },
11
+ },
12
+ safelist: [
13
+ {
14
+ pattern: /.*/,
15
+ variants: ['md','hover'],
16
+ },
17
+ ],
18
+ plugins: [],
19
+ }
@@ -0,0 +1,104 @@
1
+ let DASH_DIR = process.env.dash_dir
2
+ let SERVER = process.env.server
3
+
4
+ if(!process.env.dash_dir || !SERVER) {
5
+ // Provavelmente corrido via 'npm run serve' e não tenha variáveis de ambiente definidas
6
+ console.log("LOCAL 'npm run serve' ON OWN DIRECTORY ASSUMPTION")
7
+
8
+ let pwd = process.env.PWD
9
+ DASH_DIR = pwd.substring(pwd.lastIndexOf("/")+1)
10
+
11
+ let localSubPosition = pwd.indexOf("/recordm/customUI")
12
+ let serverFile = (localSubPosition > 0 ? pwd.substring(0,localSubPosition) : ".") + "/.server"
13
+ try {
14
+ // Se estivermos dentro de um repo cob-cli então vamos conseguir obter o servidor a partir do '.server' na raiz do repo
15
+ SERVER = "https://" + require('fs').readFileSync(serverFile, 'utf8') + ".cultofbits.com";
16
+ } catch {
17
+ // se não conseguirmos usamos a máquina de formação como default
18
+ SERVER = "https://learning.cultofbits.com";
19
+ console.warn("Warning: file '.server' not found. Using " + SERVER + " as backend" )
20
+ }
21
+ }
22
+
23
+ module.exports = {
24
+ // temos que fixar o directorio onde colocamos o build,
25
+ // para podermos usar o dashboard.html que é gerado sem o editar
26
+ // NOTA: o path relativo não funciona bem com o npm run serve
27
+ // mas queremos que o build seja relativo, para ser mais fléxivel
28
+ publicPath: process.env.NODE_ENV === 'production'
29
+ ? './localresource/' + DASH_DIR + '/dist/'
30
+ : '/' + DASH_DIR,
31
+
32
+ // seguindo https://cli.vuejs.org/guide/webpack.html
33
+ chainWebpack: config => {
34
+ // para não termos chunks
35
+ config.optimization.delete('splitChunks');
36
+
37
+ // fazemos assim em vez de usar o pages, que confunde o publicPath
38
+ config
39
+ .plugin('html')
40
+ .tap(args => {
41
+ args[0].template = 'src/dashboard.html' // Isto permite ler o ficheiro daqui em vez do default public/index.html
42
+ args[0].filename = 'dashboard.html' // Isto indica que o nome no url será dashboard.html em vez de index.html
43
+ args[0].inject = false // Não queremos inject automático pois o nosso src/dashboard.html sabe lidar com página isolado ou integrado no recordm. TODO: considerar permitir ainda shared vue e vuetify em vez de embebido (o actual). Ver NOTA abaixo.
44
+ args[0].minify = true
45
+ args[0].rmIntegrated = process.env.dash_dir || process.env.NODE_ENV === 'production' // Esta é a variável utilizada dentro do src/dashboard.html para saber qual o render a utilizar (isolado ou integrado). Deve ser integrado quer quando corrido via cob-cli test -d <dashboard> quer quando é feito o build.
46
+ return args
47
+ })
48
+ },
49
+
50
+ // NOTA: Código comentado porque abandonamos a opção de usar ficheiros partilhados. Se quisermos reverter isto é necessário:
51
+ // configureWebpack: {
52
+ // // deve ser igual ao que é usado no afterDeps do public/dashboard.html
53
+ // // Se for LOCAL temos de usar os locais
54
+ // externals: LOCAL ? {} : {
55
+ // vue: 'Vue',
56
+ // vuetify: 'Vuetify',
57
+ // axios: 'axios',
58
+ // marked: 'marked'
59
+ // },
60
+ // },
61
+
62
+ devServer: {
63
+ port: 8041,
64
+ before: function(app) {
65
+ app.get('/*', function(req, res, next) {
66
+ // Permite usar / ou /DASH_BOARD/ quando acedido directamente
67
+ if(req.url != "/" && req.url != '/'+DASH_DIR+'/') {
68
+ return next();
69
+ }
70
+
71
+ res.redirect(`/${DASH_DIR}/dashboard.html`);
72
+ });
73
+ },
74
+ proxy: {
75
+ [ "/recordm/localresource/" + DASH_DIR + "/dist"]: {
76
+ // Isto serve o propósito de rescrever os pedidos feitos via url final para o url local.
77
+ // Tem o defeito de apenas funcionar quando o devserver está a funcionar no 8041.
78
+ // Ou seja, não suporta mais que um vue-cli-service a funcionar ao mesmo tempo (apenas 1 estará a funcionar correctamente)
79
+ // TODO: idealmente seria feito sem ser via proxy (talvez via url-loader rewrite ??)
80
+ target: "http://localhost:8041",
81
+ pathRewrite: path => path.replace("/recordm/localresource/" + DASH_DIR + "/dist","/" + DASH_DIR ),
82
+ bypass: function(req, res, proxyOptions) {
83
+ if(req.path.indexOf(DASH_DIR) > 0) {
84
+ console.log("[CoB] Serving DASHBOARD: " + req.path)
85
+ }
86
+ }
87
+ },
88
+ "^/userm|^/recordm|^/es|^/logm|^/kibana": {
89
+ target: SERVER,
90
+ ws: true,
91
+ changeOrigin: true,
92
+ bypass: function(req, res, proxyOptions) {
93
+ console.log("[CoB] Serving " + SERVER + ": " + req.path)
94
+ }
95
+ },
96
+ "/get_user_lang|/security|/localresource|/recordm|/user|/reportm|/cas": {
97
+ target: SERVER,
98
+ ws: true,
99
+ changeOrigin: true,
100
+ pathRewrite: path => path.replace("/recordm/recordm", "/recordm")
101
+ }
102
+ }
103
+ }
104
+ }
@@ -0,0 +1,7 @@
1
+ .cob-app #header .nav > li > a.js-menu-40795 {
2
+ visibility: hidden;
3
+ }
4
+ .cob-app #header .nav > li > a.js-menu-40795:after {
5
+ content: "Dashboard";
6
+ visibility: visible;
7
+ }
@@ -5,9 +5,10 @@
5
5
  .cob-app .instance-detail-container div.instance-container ol.fields > li > table > tbody > tr > td:nth-child(2) {
6
6
  min-width: 160px;
7
7
  }
8
+ /*
9
+ * Removido porque estraga, pelo menos, os $radio
8
10
  .cob-app .instance-detail-container div.instance-container ol.fields li > table > tbody > tr > td:nth-child(3),
9
11
  .cob-app .instance-detail-container div.instance-container ol.fields li > table > tbody > tr > td:nth-child(3) input {
10
12
  max-width: 230px;
11
13
  width: -webkit-fill-available;
12
- z-index: -1;
13
- }
14
+ } */
@@ -0,0 +1,360 @@
1
+ /* fallback */
2
+ @font-face {
3
+ font-family: 'Material Icons';
4
+ font-style: normal;
5
+ font-weight: 400;
6
+ src: url(https://fonts.gstatic.com/s/materialicons/v47/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2) format('woff2');
7
+ }
8
+ /* cyrillic-ext */
9
+ @font-face {
10
+ font-family: 'Roboto';
11
+ font-style: normal;
12
+ font-weight: 100;
13
+ src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1MmgVxFIzIXKMnyrYk.woff2) format('woff2');
14
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
15
+ }
16
+ /* cyrillic */
17
+ @font-face {
18
+ font-family: 'Roboto';
19
+ font-style: normal;
20
+ font-weight: 100;
21
+ src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1MmgVxMIzIXKMnyrYk.woff2) format('woff2');
22
+ unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
23
+ }
24
+ /* greek-ext */
25
+ @font-face {
26
+ font-family: 'Roboto';
27
+ font-style: normal;
28
+ font-weight: 100;
29
+ src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1MmgVxEIzIXKMnyrYk.woff2) format('woff2');
30
+ unicode-range: U+1F00-1FFF;
31
+ }
32
+ /* greek */
33
+ @font-face {
34
+ font-family: 'Roboto';
35
+ font-style: normal;
36
+ font-weight: 100;
37
+ src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1MmgVxLIzIXKMnyrYk.woff2) format('woff2');
38
+ unicode-range: U+0370-03FF;
39
+ }
40
+ /* vietnamese */
41
+ @font-face {
42
+ font-family: 'Roboto';
43
+ font-style: normal;
44
+ font-weight: 100;
45
+ src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1MmgVxHIzIXKMnyrYk.woff2) format('woff2');
46
+ unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
47
+ }
48
+ /* latin-ext */
49
+ @font-face {
50
+ font-family: 'Roboto';
51
+ font-style: normal;
52
+ font-weight: 100;
53
+ src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1MmgVxGIzIXKMnyrYk.woff2) format('woff2');
54
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
55
+ }
56
+ /* latin */
57
+ @font-face {
58
+ font-family: 'Roboto';
59
+ font-style: normal;
60
+ font-weight: 100;
61
+ src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v19/KFOkCnqEu92Fr1MmgVxIIzIXKMny.woff2) format('woff2');
62
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
63
+ }
64
+ /* cyrillic-ext */
65
+ @font-face {
66
+ font-family: 'Roboto';
67
+ font-style: normal;
68
+ font-weight: 300;
69
+ src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP.woff2) format('woff2');
70
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
71
+ }
72
+ /* cyrillic */
73
+ @font-face {
74
+ font-family: 'Roboto';
75
+ font-style: normal;
76
+ font-weight: 300;
77
+ src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP.woff2) format('woff2');
78
+ unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
79
+ }
80
+ /* greek-ext */
81
+ @font-face {
82
+ font-family: 'Roboto';
83
+ font-style: normal;
84
+ font-weight: 300;
85
+ src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP.woff2) format('woff2');
86
+ unicode-range: U+1F00-1FFF;
87
+ }
88
+ /* greek */
89
+ @font-face {
90
+ font-family: 'Roboto';
91
+ font-style: normal;
92
+ font-weight: 300;
93
+ src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP.woff2) format('woff2');
94
+ unicode-range: U+0370-03FF;
95
+ }
96
+ /* vietnamese */
97
+ @font-face {
98
+ font-family: 'Roboto';
99
+ font-style: normal;
100
+ font-weight: 300;
101
+ src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP.woff2) format('woff2');
102
+ unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
103
+ }
104
+ /* latin-ext */
105
+ @font-face {
106
+ font-family: 'Roboto';
107
+ font-style: normal;
108
+ font-weight: 300;
109
+ src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP.woff2) format('woff2');
110
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
111
+ }
112
+ /* latin */
113
+ @font-face {
114
+ font-family: 'Roboto';
115
+ font-style: normal;
116
+ font-weight: 300;
117
+ src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ.woff2) format('woff2');
118
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
119
+ }
120
+ /* cyrillic-ext */
121
+ @font-face {
122
+ font-family: 'Roboto';
123
+ font-style: normal;
124
+ font-weight: 400;
125
+ src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.woff2) format('woff2');
126
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
127
+ }
128
+ /* cyrillic */
129
+ @font-face {
130
+ font-family: 'Roboto';
131
+ font-style: normal;
132
+ font-weight: 400;
133
+ src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2) format('woff2');
134
+ unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
135
+ }
136
+ /* greek-ext */
137
+ @font-face {
138
+ font-family: 'Roboto';
139
+ font-style: normal;
140
+ font-weight: 400;
141
+ src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.woff2) format('woff2');
142
+ unicode-range: U+1F00-1FFF;
143
+ }
144
+ /* greek */
145
+ @font-face {
146
+ font-family: 'Roboto';
147
+ font-style: normal;
148
+ font-weight: 400;
149
+ src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.woff2) format('woff2');
150
+ unicode-range: U+0370-03FF;
151
+ }
152
+ /* vietnamese */
153
+ @font-face {
154
+ font-family: 'Roboto';
155
+ font-style: normal;
156
+ font-weight: 400;
157
+ src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.woff2) format('woff2');
158
+ unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
159
+ }
160
+ /* latin-ext */
161
+ @font-face {
162
+ font-family: 'Roboto';
163
+ font-style: normal;
164
+ font-weight: 400;
165
+ src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2) format('woff2');
166
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
167
+ }
168
+ /* latin */
169
+ @font-face {
170
+ font-family: 'Roboto';
171
+ font-style: normal;
172
+ font-weight: 400;
173
+ src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2) format('woff2');
174
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
175
+ }
176
+ /* cyrillic-ext */
177
+ @font-face {
178
+ font-family: 'Roboto';
179
+ font-style: normal;
180
+ font-weight: 500;
181
+ src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.woff2) format('woff2');
182
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
183
+ }
184
+ /* cyrillic */
185
+ @font-face {
186
+ font-family: 'Roboto';
187
+ font-style: normal;
188
+ font-weight: 500;
189
+ src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2) format('woff2');
190
+ unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
191
+ }
192
+ /* greek-ext */
193
+ @font-face {
194
+ font-family: 'Roboto';
195
+ font-style: normal;
196
+ font-weight: 500;
197
+ src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.woff2) format('woff2');
198
+ unicode-range: U+1F00-1FFF;
199
+ }
200
+ /* greek */
201
+ @font-face {
202
+ font-family: 'Roboto';
203
+ font-style: normal;
204
+ font-weight: 500;
205
+ src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2) format('woff2');
206
+ unicode-range: U+0370-03FF;
207
+ }
208
+ /* vietnamese */
209
+ @font-face {
210
+ font-family: 'Roboto';
211
+ font-style: normal;
212
+ font-weight: 500;
213
+ src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2) format('woff2');
214
+ unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
215
+ }
216
+ /* latin-ext */
217
+ @font-face {
218
+ font-family: 'Roboto';
219
+ font-style: normal;
220
+ font-weight: 500;
221
+ src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2) format('woff2');
222
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
223
+ }
224
+ /* latin */
225
+ @font-face {
226
+ font-family: 'Roboto';
227
+ font-style: normal;
228
+ font-weight: 500;
229
+ src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2) format('woff2');
230
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
231
+ }
232
+ /* cyrillic-ext */
233
+ @font-face {
234
+ font-family: 'Roboto';
235
+ font-style: normal;
236
+ font-weight: 700;
237
+ src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmWUlfCRc4AMP6lbBP.woff2) format('woff2');
238
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
239
+ }
240
+ /* cyrillic */
241
+ @font-face {
242
+ font-family: 'Roboto';
243
+ font-style: normal;
244
+ font-weight: 700;
245
+ src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmWUlfABc4AMP6lbBP.woff2) format('woff2');
246
+ unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
247
+ }
248
+ /* greek-ext */
249
+ @font-face {
250
+ font-family: 'Roboto';
251
+ font-style: normal;
252
+ font-weight: 700;
253
+ src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmWUlfCBc4AMP6lbBP.woff2) format('woff2');
254
+ unicode-range: U+1F00-1FFF;
255
+ }
256
+ /* greek */
257
+ @font-face {
258
+ font-family: 'Roboto';
259
+ font-style: normal;
260
+ font-weight: 700;
261
+ src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmWUlfBxc4AMP6lbBP.woff2) format('woff2');
262
+ unicode-range: U+0370-03FF;
263
+ }
264
+ /* vietnamese */
265
+ @font-face {
266
+ font-family: 'Roboto';
267
+ font-style: normal;
268
+ font-weight: 700;
269
+ src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmWUlfCxc4AMP6lbBP.woff2) format('woff2');
270
+ unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
271
+ }
272
+ /* latin-ext */
273
+ @font-face {
274
+ font-family: 'Roboto';
275
+ font-style: normal;
276
+ font-weight: 700;
277
+ src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmWUlfChc4AMP6lbBP.woff2) format('woff2');
278
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
279
+ }
280
+ /* latin */
281
+ @font-face {
282
+ font-family: 'Roboto';
283
+ font-style: normal;
284
+ font-weight: 700;
285
+ src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmWUlfBBc4AMP6lQ.woff2) format('woff2');
286
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
287
+ }
288
+ /* cyrillic-ext */
289
+ @font-face {
290
+ font-family: 'Roboto';
291
+ font-style: normal;
292
+ font-weight: 900;
293
+ src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmYUtfCRc4AMP6lbBP.woff2) format('woff2');
294
+ unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
295
+ }
296
+ /* cyrillic */
297
+ @font-face {
298
+ font-family: 'Roboto';
299
+ font-style: normal;
300
+ font-weight: 900;
301
+ src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmYUtfABc4AMP6lbBP.woff2) format('woff2');
302
+ unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
303
+ }
304
+ /* greek-ext */
305
+ @font-face {
306
+ font-family: 'Roboto';
307
+ font-style: normal;
308
+ font-weight: 900;
309
+ src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmYUtfCBc4AMP6lbBP.woff2) format('woff2');
310
+ unicode-range: U+1F00-1FFF;
311
+ }
312
+ /* greek */
313
+ @font-face {
314
+ font-family: 'Roboto';
315
+ font-style: normal;
316
+ font-weight: 900;
317
+ src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmYUtfBxc4AMP6lbBP.woff2) format('woff2');
318
+ unicode-range: U+0370-03FF;
319
+ }
320
+ /* vietnamese */
321
+ @font-face {
322
+ font-family: 'Roboto';
323
+ font-style: normal;
324
+ font-weight: 900;
325
+ src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmYUtfCxc4AMP6lbBP.woff2) format('woff2');
326
+ unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
327
+ }
328
+ /* latin-ext */
329
+ @font-face {
330
+ font-family: 'Roboto';
331
+ font-style: normal;
332
+ font-weight: 900;
333
+ src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmYUtfChc4AMP6lbBP.woff2) format('woff2');
334
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
335
+ }
336
+ /* latin */
337
+ @font-face {
338
+ font-family: 'Roboto';
339
+ font-style: normal;
340
+ font-weight: 900;
341
+ src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v19/KFOlCnqEu92Fr1MmYUtfBBc4AMP6lQ.woff2) format('woff2');
342
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
343
+ }
344
+
345
+ .material-icons {
346
+ font-family: 'Material Icons';
347
+ font-weight: normal;
348
+ font-style: normal;
349
+ font-size: 24px;
350
+ line-height: 1;
351
+ letter-spacing: normal;
352
+ text-transform: none;
353
+ display: inline-block;
354
+ white-space: nowrap;
355
+ word-wrap: normal;
356
+ direction: ltr;
357
+ -moz-font-feature-settings: 'liga';
358
+ -moz-osx-font-smoothing: grayscale;
359
+ }
360
+