+
Mic Boost
@@ -175,11 +175,11 @@
- {{#paper-checkbox checked=flashingTransitions}}Flashing Transitions{{/paper-checkbox}}
+ {{paper-checkbox value=flashingTransitions onChange=(action (mut flashingTransitions)) label="Flashing Transitions"}}
- {{#paper-checkbox checked=colorloopMode}}Colorloop{{/paper-checkbox}}
+ {{paper-checkbox value=colorloopMode onChange=(action (mut colorloopMode)) label="Colorloop"}}
{{!--
diff --git a/web/app/styles/app.scss b/web/app/styles/app.scss
index d1ac42a..acb9c25 100644
--- a/web/app/styles/app.scss
+++ b/web/app/styles/app.scss
@@ -1,6 +1,8 @@
@import 'ember-modal-dialog/ember-modal-structure';
@import 'ember-modal-dialog/ember-modal-appearance';
+@import 'huegasm-variables';
+
@import 'bootstrap'; // used to take out bootstrap scss modules that we don't need
@import 'paper';
@@ -10,7 +12,6 @@
@import 'fancy-speaker';
@import 'introjs';
@import 'hue-controls';
-@import 'huegasm-variables';
@import 'light-group';
@import 'music-tab';
@import 'noui-slider';
@@ -58,7 +59,7 @@ body, button {
.title {
- margin-bottom: 30px;
+ margin-bottom: 20px;
img {
width: 200px;
}
diff --git a/web/app/styles/bridge-finder.scss b/web/app/styles/bridge-finder.scss
index b693b2a..5e1ed9c 100644
--- a/web/app/styles/bridge-finder.scss
+++ b/web/app/styles/bridge-finder.scss
@@ -12,7 +12,7 @@
#bridge-input md-input-container{
max-width: 200px;
- margin: 0 auto;
+ margin: 30px auto;
}
#intro {
@@ -20,13 +20,13 @@
}
#intro-paragraph {
- margin-bottom: 50px;
+ margin-bottom: 30px;
font-size: 16px;
}
#bridge-finder, .ready-block {
text-align: center;
- padding-top: 10px;
+ padding: 10px 15px 0;
font-size: 16px;
}
@@ -49,7 +49,7 @@
}
.embed-container-wrapper {
- max-width: 600px;
+ max-width: 550px;
margin: auto;
}
@@ -62,15 +62,12 @@
}
.go-button {
- margin-top: 20px;
+ margin: 20px 0;
border-radius: 100% !important;
width: 100px;
height: 100px;
- span {
- font-size: 28px;
- width: 100%;
- }
+ font-size: 28px;
&:hover {
background: darken(#3f51b5, 10%) !important;
}
-}
\ No newline at end of file
+}
diff --git a/web/app/styles/dimmer.scss b/web/app/styles/dimmer.scss
index c59e088..119e4d1 100644
--- a/web/app/styles/dimmer.scss
+++ b/web/app/styles/dimmer.scss
@@ -1,5 +1,3 @@
-@import 'huegasm-variables';
-
div.dimmerOn {
color: $whitish !important;
background: $blackish !important;
@@ -13,6 +11,15 @@ html.dimmerOn {
body.dimmerOn {
color: $whitish;
background: $blackish;
+ md-input-container {
+ label {
+ color: #3f51b5 !important;
+ }
+ .md-input {
+ color: $whitish !important;
+ border-color: #3f51b5 !important;
+ }
+ }
.md-track {
background: $whitish;
}
@@ -38,7 +45,7 @@ body.dimmerOn {
&:hover {
background: darken($dimmerOnButtonColor, 10%);
}
- .close {
+ .audio-remove-button .paper-icon {
color: $whitish !important;
&:hover {
color: white !important;
@@ -48,16 +55,8 @@ body.dimmerOn {
svg {
-webkit-filter: drop-shadow(0 0 5px #228DFF);
}
- md-input-container {
- label {
- color: $whitish;
- }
- input {
- border-bottom-color: $whitish !important;
- }
- input {
- color: $whitish !important;
- }
+ .md-container {
+ color: $whitish;
}
.add-new-music:hover {
background: darken($dimmerOnButtonColor, 5%);
@@ -70,17 +69,8 @@ body.dimmerOn {
}
}
-.power-settings-new.dimmerOn,
-.brightness-4.dimmerOn,
-.color-lens.dimmerOn,
-.flare.dimmerOn,
-.loop.dimmerOn,
-.group.dimmerOn,
-.settings.dimmerOn,
-.mic.dimmerOn,
-.check.dimmerOn,
-.star.dimmerOn,
-.library-music.dimmerOn {
+
+.paper-icon.dimmerOn {
color: inherit !important;
text-shadow: $glowingText;
opacity: 0.9 !important;
@@ -93,4 +83,4 @@ body.dimmerOn {
height: 40px;
background: url(/favicon-96x96.png) center center no-repeat;
background-size: 40px 40px;
-}
\ No newline at end of file
+}
diff --git a/web/app/styles/hue-controls.scss b/web/app/styles/hue-controls.scss
index 77e3a80..f492167 100644
--- a/web/app/styles/hue-controls.scss
+++ b/web/app/styles/hue-controls.scss
@@ -1,7 +1,7 @@
#lights-tab {
min-height: 400px;
- md-list {
- padding-top: 0;
+ .paper-icon {
+ line-height: 0.8 !important;
}
}
@@ -25,7 +25,7 @@
}
#navigation {
- padding: 10px 0;
+ padding: 15px 0;
text-align: center;
}
@@ -49,7 +49,7 @@
right: 0;
}
-.color-picker {
+#color-picker {
padding: 5px;
background: rgba(0, 0, 0, 0.7);
box-shadow: 5px 10px 15px 5px rgba(0, 0, 0, 0.3);
@@ -100,3 +100,15 @@
transition: 0.1s all ease-in-out;
}
}
+
+@media(min-width:767px) {
+ #lights-tab {
+ font-size: 20px;
+ .paper-icon {
+ font-size: 24px;
+ }
+ .md-list-item-inner {
+ height: 75px;
+ }
+ }
+}
diff --git a/web/app/styles/huegasm-variables.scss b/web/app/styles/huegasm-variables.scss
index c59a2ef..aec128d 100644
--- a/web/app/styles/huegasm-variables.scss
+++ b/web/app/styles/huegasm-variables.scss
@@ -1,9 +1,10 @@
$playerHeight: 400px;
$playerDefaultIconColor: #BBBBBB;
-$footerHeight: 45px;
+$footerHeight: 50px;
$playerBottomHeight: 255px;
$secondaryThemeColor: #F12B24;
-$glowingText: 0 0 2px #fff, 0 0 4px #fff, 0 0 2px #228DFF;
+$glowingText: 0 0 2px #fff, 0 0 4px #fff, 0 0 20px #228DFF;
$dimmerOnButtonColor: #404040;
$blackish: #242424;
-$whitish: #e0e0e0;
\ No newline at end of file
+$whitish: #e0e0e0;
+$paperThemeColor: #3f51b5;
diff --git a/web/app/styles/introjs.scss b/web/app/styles/introjs.scss
index e0413e6..6578692 100644
--- a/web/app/styles/introjs.scss
+++ b/web/app/styles/introjs.scss
@@ -1,5 +1,3 @@
-@import 'huegasm-variables';
-
.introjs-overlay {
background: black;
}
@@ -21,4 +19,4 @@
height: 10px;
width: 10px;
top: -2px;
-}
\ No newline at end of file
+}
diff --git a/web/app/styles/light-group.scss b/web/app/styles/light-group.scss
index 0f47272..f9b1256 100644
--- a/web/app/styles/light-group.scss
+++ b/web/app/styles/light-group.scss
@@ -1,5 +1,5 @@
.light-group {
- margin: 0 auto 10px auto;
+ margin: 0 auto;
text-align: center;
.tooltip.top {
margin-top: 4px;
diff --git a/web/app/styles/music-tab.scss b/web/app/styles/music-tab.scss
index 2496a6d..754d7d0 100644
--- a/web/app/styles/music-tab.scss
+++ b/web/app/styles/music-tab.scss
@@ -1,5 +1,3 @@
-@import 'huegasm-variables';
-
.row {
margin: 0;
}
@@ -15,19 +13,18 @@
transform: translateY(-20%);
.tooltip {
margin-top: 5px !important;
- left: 0 !important;
}
}
#music-tab {
padding: 0;
- margin-bottom: $footerHeight + 30px;
+ margin: 10px 0 $footerHeight + 20px;
}
#slide-toggle {
color: $playerDefaultIconColor;
background: #730B07;
- div md-icon {
+ div .paper-icon {
color: inherit !important;
}
}
@@ -253,6 +250,7 @@
height: $playerBottomHeight;
position: relative;
padding: 0;
+ margin-bottom: 10px;
}
.star {
@@ -269,7 +267,7 @@
md-switch {
margin: 0;
}
- .optionDescription {
+ .option-description {
font-size: 16px;
}
button {
@@ -365,7 +363,7 @@
font-size: 20px;
}
-.check {
+.visualizers-menu .paper-icon {
margin-left: 10px;
position: relative;
top: -4px;
diff --git a/web/app/styles/noui-slider.scss b/web/app/styles/noui-slider.scss
index 651bf6b..06c756b 100644
--- a/web/app/styles/noui-slider.scss
+++ b/web/app/styles/noui-slider.scss
@@ -1,5 +1,3 @@
-@import 'huegasm-variables';
-
.noUi-value-vertical {
margin-top: -10px;
transform: none;
@@ -54,6 +52,5 @@
.noUi-vertical {
height: 200px;
- margin-top: 10px;
- margin-bottom: 15px;
+ margin: 15px auto 10px;
}
diff --git a/web/app/styles/paper.scss b/web/app/styles/paper.scss
index 6f23229..5656e0e 100644
--- a/web/app/styles/paper.scss
+++ b/web/app/styles/paper.scss
@@ -1,7 +1,10 @@
@import 'ember-paper';
-@import 'huegasm-variables';
-md-checkbox.md-default-theme .md-icon {
+.md-icon {
+ cursor: pointer;
+}
+
+md-checkbox .md-icon, .md-off, .md-on {
border-color: inherit !important;
}
@@ -32,12 +35,7 @@ md-progress-circular {
}
md-progress-linear {
- margin-bottom: 50px;
-}
-
-.bootstrap-tooltip md-icon {
- cursor: pointer;
- -webkit-transform: translate3d(0, 0, 0); // hack for chrome to force hardware acceleration and stop flickering
+ margin-bottom: 50px !important;
}
md-slider {
@@ -53,10 +51,6 @@ md-icon {
color: rgba(0, 0, 0, 0.54) !important;
}
-md-toolbar {
- background-color: inherit !important;
-}
-
md-switch.md-default-theme.md-checked .md-thumb {
background-color: $secondaryThemeColor;
}
diff --git a/web/bower.json b/web/bower.json
index 78dcfa2..f0ecb1a 100644
--- a/web/bower.json
+++ b/web/bower.json
@@ -1,19 +1,19 @@
{
"name": "huegasm",
"dependencies": {
+ "HackTimer": "https://github.com/turuslan/HackTimer.git#~1.0.0",
+ "JavaScript-ID3-Reader": "https://github.com/aadsm/JavaScript-ID3-Reader.git",
"bootstrap-sass": "^3.3.5",
- "ember": "^2.8.1",
+ "ember": "^2.9.0",
"ember-cli-shims": "^0.1.0",
"ember-load-initializers": "0.5.1",
"ember-qunit-notifications": "0.1.0",
+ "hammer.js": "^2.0.8",
"intro.js": "^2.1.0",
- "JavaScript-ID3-Reader": "https://github.com/aadsm/JavaScript-ID3-Reader.git",
"jquery-mousewheel": "^3.1.13",
"locallyjs": "^0.3.2",
"matchMedia": "^0.3.0",
"nouislider": "^9.0.0",
- "HackTimer": "https://github.com/turuslan/HackTimer.git#~1.0.0",
- "hammer.js": "^2.0.8",
"velocity": "^1.3.1"
}
}
diff --git a/web/config/environment.js b/web/config/environment.js
index d1ba865..7785544 100644
--- a/web/config/environment.js
+++ b/web/config/environment.js
@@ -7,6 +7,7 @@ module.exports = function(environment) {
environment: environment,
rootURL: '/',
locationType: 'auto',
+ ignoreFailures: false,
EmberENV: {
FEATURES: {
// Here you can enable experimental features on an ember canary build
@@ -21,6 +22,7 @@ module.exports = function(environment) {
};
if (environment === 'development') {
+ ENV.ignoreFailures = true;
// ENV.APP.LOG_RESOLVER = true;
// ENV.APP.LOG_ACTIVE_GENERATION = true;
// ENV.APP.LOG_TRANSITIONS = true;
diff --git a/web/package.json b/web/package.json
index d867061..791aa3f 100644
--- a/web/package.json
+++ b/web/package.json
@@ -38,7 +38,7 @@
"ember-load-initializers": "^0.5.0",
"ember-modal-dialog": "^0.9.0",
"ember-notify": "^5.0.4",
- "ember-paper": "^0.2.14",
+ "ember-paper": "^1.0.0-alpha.5",
"ember-resolver": "^2.0.3",
"ember-truth-helpers": "^1.2.0",
"loader.js": "^4.0.7"
diff --git a/web/yarn.lock b/web/yarn.lock
index 116ae29..99e6d10 100644
--- a/web/yarn.lock
+++ b/web/yarn.lock
@@ -50,18 +50,22 @@ amdefine@>=0.0.4:
version "1.0.0"
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.0.tgz#fd17474700cb5cc9c2b709f0be9d23ce3c198c33"
+"angular-material-source@github:angular/material#v1.0.6":
+ version "1.0.6"
+ resolved "https://codeload.github.com/angular/material/tar.gz/8b886cbed0254eaefa2f85077ebf4169cb09a762"
+
ansi-escapes@^1.1.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
+ansi-regex@*, ansi-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
+
ansi-regex@^0.2.0, ansi-regex@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9"
-ansi-regex@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
-
ansi-styles@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de"
@@ -201,8 +205,8 @@ async@^1.4.0, async@^1.5.2:
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
async@^2.0.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/async/-/async-2.1.1.tgz#e11b6d10043f2254efb61a21163d840ccddb8d28"
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.1.2.tgz#612a4ab45ef42a70cde806bad86ee6db047e8385"
dependencies:
lodash "^4.14.0"
@@ -479,16 +483,16 @@ breakable@~1.0.0:
resolved "https://registry.yarnpkg.com/breakable/-/breakable-1.0.0.tgz#784a797915a38ead27bad456b5572cb4bbaa78c1"
broccoli-asset-rev@^2.2.0:
- version "2.4.6"
- resolved "https://registry.yarnpkg.com/broccoli-asset-rev/-/broccoli-asset-rev-2.4.6.tgz#bce559d8dc8b7e66fd66dd2ffe66e4d44dd600a5"
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/broccoli-asset-rev/-/broccoli-asset-rev-2.5.0.tgz#f5f66eac962bf9f086286921f0eaeaab6d00d819"
dependencies:
- broccoli-asset-rewrite "^1.0.13"
+ broccoli-asset-rewrite "^1.1.0"
broccoli-filter "^1.2.2"
json-stable-stringify "^1.0.0"
matcher-collection "^1.0.1"
rsvp "^3.0.6"
-broccoli-asset-rewrite@^1.0.13:
+broccoli-asset-rewrite@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/broccoli-asset-rewrite/-/broccoli-asset-rewrite-1.1.0.tgz#77a5da56157aa318c59113245e8bafb4617f8830"
dependencies:
@@ -842,8 +846,8 @@ can-symlink@^1.0.0:
tmp "0.0.28"
caniuse-db@^1.0.30000153, caniuse-db@^1.0.30000214:
- version "1.0.30000554"
- resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000554.tgz#cd1dbe423d00b6203ba93f05973a476428dec919"
+ version "1.0.30000559"
+ resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000559.tgz#afbd68916dd23bfd549c26520c78631fb5e2e393"
cardinal@^0.5.0:
version "0.5.0"
@@ -1682,11 +1686,11 @@ ember-cli@^2.8.0:
walk-sync "^0.2.6"
yam "0.0.21"
-ember-css-transitions@0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/ember-css-transitions/-/ember-css-transitions-0.1.2.tgz#987fe3ca64c759fa65d48148d7ad62bd4cc21a22"
+ember-css-transitions@0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/ember-css-transitions/-/ember-css-transitions-0.1.5.tgz#0c57917b89e7c39d37f4435b8fb18fca0acccf73"
dependencies:
- ember-cli-babel "^5.1.5"
+ ember-cli-babel "^5.1.6"
ember-export-application-global@^1.0.4:
version "1.1.1"
@@ -1708,21 +1712,25 @@ ember-modal-dialog@^0.9.0:
ember-wormhole "~0.3.6"
ember-notify@^5.0.4:
- version "5.1.4"
- resolved "https://registry.yarnpkg.com/ember-notify/-/ember-notify-5.1.4.tgz#1798aa6de984cfdd6a8a8749e6922964cd8cdebf"
+ version "5.1.6"
+ resolved "https://registry.yarnpkg.com/ember-notify/-/ember-notify-5.1.6.tgz#5f728d3ecc792a839cb549fe3ed0f019fed2c706"
dependencies:
ember-cli-babel "^5.1.6"
ember-cli-htmlbars "^1.0.3"
ember-string-ishtmlsafe-polyfill "1.0.1"
-ember-paper@^0.2.14:
- version "0.2.15"
- resolved "https://registry.yarnpkg.com/ember-paper/-/ember-paper-0.2.15.tgz#330bed37f4819a20f02d2c41b35a9dcdc5b4c38b"
+ember-paper@^1.0.0-alpha.5:
+ version "1.0.0-alpha.5"
+ resolved "https://registry.yarnpkg.com/ember-paper/-/ember-paper-1.0.0-alpha.5.tgz#fc9fd3796dd9c6b2f1bb8bb87094702ef3ec07f7"
dependencies:
+ angular-material-source angular/material#v1.0.6
broccoli-autoprefixer "^3.0.0"
- ember-cli-babel "^5.1.5"
- ember-css-transitions "0.1.2"
- ember-wormhole "^0.3.4"
+ broccoli-filter "^1.2.3"
+ broccoli-funnel "^1.0.1"
+ broccoli-merge-trees "^1.1.0"
+ ember-cli-babel "^5.1.6"
+ ember-css-transitions "0.1.5"
+ ember-wormhole "0.4.1"
ember-qunit@^0.4.18:
version "0.4.22"
@@ -1790,12 +1798,19 @@ ember-try@^0.2.2:
semver "^5.1.0"
sync-exec "^0.6.2"
-ember-wormhole@^0.3.4, ember-wormhole@~0.3.6:
+ember-wormhole@~0.3.6:
version "0.3.6"
resolved "https://registry.yarnpkg.com/ember-wormhole/-/ember-wormhole-0.3.6.tgz#bbe21bb5478ad254efe4fff4019ac6710f4ad85c"
dependencies:
ember-cli-babel "^5.0.0"
+ember-wormhole@0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/ember-wormhole/-/ember-wormhole-0.4.1.tgz#55fafaad20a650d21f6583a0e59c060a65338111"
+ dependencies:
+ ember-cli-babel "^5.1.6"
+ ember-cli-htmlbars "^1.0.3"
+
encodeurl@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
@@ -2253,8 +2268,8 @@ getpass@^0.1.1:
assert-plus "^1.0.0"
git-repo-info@^1.0.4:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-1.2.0.tgz#43d8513e04a24dd441330a2f7c6655a709fdbaf2"
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-1.3.0.tgz#d49c30955cf58c0ec1acd52d26bc5b8af13afd58"
git-repo-version@0.4.0:
version "0.4.0"
@@ -2518,7 +2533,7 @@ iferr@^0.1.5:
version "0.1.5"
resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
-imurmurhash@^0.1.4:
+imurmurhash@*, imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
@@ -2545,8 +2560,8 @@ inflection@^1.7.0, inflection@^1.7.1:
resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.10.0.tgz#5bffcb1197ad3e81050f8e17e21668087ee9eb2f"
inflight@^1.0.4, inflight@~1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.5.tgz#db3204cd5a9de2e6cd890b85c6e2f66bcf4f620a"
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
dependencies:
once "^1.3.0"
wrappy "1"
@@ -2858,8 +2873,8 @@ leven@^1.0.2:
resolved "https://registry.yarnpkg.com/leven/-/leven-1.0.2.tgz#9144b6eebca5f1d0680169f1a6770dcea60b75c3"
linkify-it@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.0.1.tgz#fda759fad89d9e4659aa7144b8a4f685691dab69"
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.0.2.tgz#994629a4adfa5a7d34e08c075611575ab9b6fcfc"
dependencies:
uc.micro "^1.0.1"
@@ -3832,8 +3847,8 @@ pinkie@^2.0.0:
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
portfinder@^1.0.4:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.7.tgz#d486d2553c85ad22667f5c7841f477c64c7c1b38"
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.8.tgz#b08b2ed226719d682b6f4158eb8e5b69a2561f71"
dependencies:
async "^1.5.2"
debug "^2.2.0"