From c06889c3bbf4f4d6868c36e79d0d41e31ccfd983 Mon Sep 17 00:00:00 2001
From: thecozies <79979276+thecozies@users.noreply.github.com>
Date: Sun, 21 Apr 2024 15:55:45 -0500
Subject: [PATCH] added quit button and confirmation prompt
---
assets/config_menu.rml | 24 +++++++----
assets/icons/Quit.svg | 11 +++++
assets/recomp.rcss | 2 +-
assets/scss/styles/components/Button.scss | 6 +--
assets/scss/styles/components/Config.scss | 13 +++++-
include/recomp_ui.h | 21 +++++++++-
src/ui/ui_config.cpp | 49 +++++++++++++++++++++--
src/ui/ui_renderer.cpp | 34 ++++++++++++++++
8 files changed, 141 insertions(+), 19 deletions(-)
create mode 100644 assets/icons/Quit.svg
diff --git a/assets/config_menu.rml b/assets/config_menu.rml
index ac117e0..6de1fb4 100644
--- a/assets/config_menu.rml
+++ b/assets/config_menu.rml
@@ -72,14 +72,22 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/recomp.rcss b/assets/recomp.rcss
index b2694ed..f8f0bcc 100644
--- a/assets/recomp.rcss
+++ b/assets/recomp.rcss
@@ -1 +1 @@
-h1{font-size:68dp;letter-spacing:4.76dp;line-height:68dp;font-style:normal;font-weight:700}h2{font-size:52dp;letter-spacing:3.64dp;line-height:52dp;font-style:normal;font-weight:700}h3,.tab{font-size:36dp;letter-spacing:2.52dp;line-height:36dp;font-style:normal;font-weight:700}.label-lg,.menu-list-item__label,.button--large{font-size:36dp;letter-spacing:3.96dp;line-height:36dp;font-style:normal;font-weight:700}.label-md,.config-debug-option__label,.button,.config-option__title,.control-option__label{font-size:28dp;letter-spacing:3.08dp;line-height:28dp;font-style:normal;font-weight:700}.label-sm,.config-debug__select-wrapper .config-debug__select-label,.subtitle-title__disclaimer,.config-option__range-label,.config-option__list .config-option__tab-label,.centered-page__controls>label{font-size:20dp;letter-spacing:2.8dp;line-height:20dp;font-style:normal;font-weight:700;text-transform:uppercase}.config-option__details{font-size:18dp;letter-spacing:2.52dp;line-height:18dp;font-style:normal;font-weight:400}body,.config-debug__select-wrapper select,.config-debug__select-wrapper input,.config__wrapper p{font-size:20dp;letter-spacing:0dp;line-height:20dp;font-style:normal;font-weight:400}.toggle__icon{font-family:promptfont;font-size:56dp;font-style:normal;font-weight:400;line-height:56dp}.prompt-font{font-family:promptfont;font-size:40dp;font-style:normal;font-weight:400;line-height:40dp}.prompt-font-sm,.input-viz__mappings div{font-family:promptfont;font-size:32dp;font-style:normal;font-weight:400;line-height:32dp}.nav-vert,.nav-dir,.nav-all,.config-debug__select-wrapper select selectbox option,.config-debug__select-wrapper select,.config-debug__select-wrapper input,.toggle,.subtitle-title:not(:disabled,[disabled]),.menu-list-item:not(:disabled,[disabled]),.icon-button:not([disabled]),.button:not([disabled]),.button,.config-option__list input.radio,.tab,.control-option__binding:not([disabled]),.centered-page__modal{nav-up:auto;nav-down:auto}.nav-horiz,.nav-dir,.nav-all,.config-debug__select-wrapper select selectbox option,.config-debug__select-wrapper select,.config-debug__select-wrapper input,.toggle,.subtitle-title:not(:disabled,[disabled]),.menu-list-item:not(:disabled,[disabled]),.icon-button:not([disabled]),.button:not([disabled]),.button,.config-option__list input.radio,.tab,.control-option__binding:not([disabled]),.centered-page__modal{nav-right:auto;nav-left:auto}.nav-foc,.nav-all,.config-debug__select-wrapper select selectbox option,.config-debug__select-wrapper select,.config-debug__select-wrapper input,.toggle,.subtitle-title:not(:disabled,[disabled]),.menu-list-item:not(:disabled,[disabled]),.icon-button:not([disabled]),.button:not([disabled]),.button,.config-option__list input.radio,.tab,.control-option__binding:not([disabled]),.centered-page__modal{focus:auto;tab-index:auto}h1{font-size:68dp;letter-spacing:4.76dp;line-height:68dp;font-style:normal;font-weight:700}h2{font-size:52dp;letter-spacing:3.64dp;line-height:52dp;font-style:normal;font-weight:700}h3,.tab{font-size:36dp;letter-spacing:2.52dp;line-height:36dp;font-style:normal;font-weight:700}.label-lg,.menu-list-item__label,.button--large{font-size:36dp;letter-spacing:3.96dp;line-height:36dp;font-style:normal;font-weight:700}.label-md,.config-debug-option__label,.button,.config-option__title,.control-option__label{font-size:28dp;letter-spacing:3.08dp;line-height:28dp;font-style:normal;font-weight:700}.label-sm,.config-debug__select-wrapper .config-debug__select-label,.subtitle-title__disclaimer,.config-option__range-label,.config-option__list .config-option__tab-label,.centered-page__controls>label{font-size:20dp;letter-spacing:2.8dp;line-height:20dp;font-style:normal;font-weight:700;text-transform:uppercase}.config-option__details{font-size:18dp;letter-spacing:2.52dp;line-height:18dp;font-style:normal;font-weight:400}body,.config-debug__select-wrapper select,.config-debug__select-wrapper input,.config__wrapper p{font-size:20dp;letter-spacing:0dp;line-height:20dp;font-style:normal;font-weight:400}.toggle__icon{font-family:promptfont;font-size:56dp;font-style:normal;font-weight:400;line-height:56dp}.prompt-font{font-family:promptfont;font-size:40dp;font-style:normal;font-weight:400;line-height:40dp}.prompt-font-sm,.input-viz__mappings div{font-family:promptfont;font-size:32dp;font-style:normal;font-weight:400;line-height:32dp}.nav-vert,.nav-dir,.nav-all,.config-debug__select-wrapper select selectbox option,.config-debug__select-wrapper select,.config-debug__select-wrapper input,.toggle,.subtitle-title:not(:disabled,[disabled]),.menu-list-item:not(:disabled,[disabled]),.icon-button:not([disabled]),.button:not([disabled]),.button,.config-option__list input.radio,.tab,.control-option__binding:not([disabled]),.centered-page__modal{nav-up:auto;nav-down:auto}.nav-horiz,.nav-dir,.nav-all,.config-debug__select-wrapper select selectbox option,.config-debug__select-wrapper select,.config-debug__select-wrapper input,.toggle,.subtitle-title:not(:disabled,[disabled]),.menu-list-item:not(:disabled,[disabled]),.icon-button:not([disabled]),.button:not([disabled]),.button,.config-option__list input.radio,.tab,.control-option__binding:not([disabled]),.centered-page__modal{nav-right:auto;nav-left:auto}.nav-foc,.nav-all,.config-debug__select-wrapper select selectbox option,.config-debug__select-wrapper select,.config-debug__select-wrapper input,.toggle,.subtitle-title:not(:disabled,[disabled]),.menu-list-item:not(:disabled,[disabled]),.icon-button:not([disabled]),.button:not([disabled]),.button,.config-option__list input.radio,.tab,.control-option__binding:not([disabled]),.centered-page__modal{focus:auto;tab-index:auto}*{box-sizing:border-box}hr{display:block;padding:1.5dp;background:#08070d}body{color:#fff;font-family:chiaro;font-size:20dp;font-style:normal;font-weight:normal}div#window{position:relative;box-sizing:border-box;width:100%;height:100%;border-color:rgba(255,255,255,.2);background-color:#121018}div#content{z-index:2;width:auto;height:100%;overflow:hidden auto;text-align:center}p{text-align:left}input.submit{margin-left:0}input.text,input.password{box-sizing:border-box;height:31dp;padding:11dp 10dp 0;text-align:left;cursor:text}textarea{padding:14dp 12dp 10dp;text-align:left;cursor:text}input.text,input.password,select,textarea{height:auto}table input.text{box-sizing:border-box;width:100%;height:auto;margin:0;border-width:1.1dp;border-color:#000;background-color:#fff;font-size:15dp;line-height:1;decorator:none}input.radio,input.checkbox{flex:0;width:0dp;nav-up:auto;nav-right:auto;nav-down:auto;nav-left:auto;tab-index:auto;focus:auto}scrollbarvertical,scrollbarhorizontal{margin:0;border:0}scrollbarvertical slidertrack,scrollbarhorizontal slidertrack{background:#dabaf7;opacity:.05}scrollbarvertical sliderbar,scrollbarhorizontal sliderbar{border-radius:5dp;background:#dabaf7;opacity:.1}scrollbarvertical sliderbar:hover:not(:active),scrollbarhorizontal sliderbar:hover:not(:active){opacity:.2}scrollbarvertical sliderbar:active,scrollbarhorizontal sliderbar:active{opacity:.3}scrollbarvertical sliderarrowdec,scrollbarvertical sliderarrowinc,scrollbarhorizontal sliderarrowdec,scrollbarhorizontal sliderarrowinc{width:0;height:0}scrollbarvertical{width:12dp}scrollbarvertical slidertrack{width:12dp}scrollbarvertical sliderbar{width:12dp}scrollbarhorizontal{height:12dp}scrollbarhorizontal slidertrack{height:12dp}scrollbarhorizontal sliderbar{height:12dp}.centered-page{display:flex;position:absolute;top:0;right:0;bottom:0;left:0;padding:64dp;background-color:rgba(255,255,255,.1)}.centered-page__modal{display:flex;position:relative;flex:1 1 100%;flex-direction:column;width:100%;max-width:1692.4444444444dp;height:100%;margin:auto;border-width:1.1dp;border-radius:16dp;border-color:rgba(255,255,255,.2);background:rgba(8,7,13,.9)}.centered-page__modal>.tabs{display:flex;position:relative;flex:1 1 100%;flex-direction:column;width:100%;max-width:1692.4444444444dp;height:100%;margin:auto}.centered-page__modal panels{flex:1 1 100%}.centered-page__controls{display:flex;position:absolute;bottom:24dp;flex-direction:row;align-items:center;justify-content:center;width:100%;max-width:1692.4444444444dp;height:auto;margin:0 auto}.centered-page__controls>label{display:inline-block;align-items:center;justify-content:space-between;width:auto;height:24dp}.centered-page__controls>label:not(:last-child){margin-right:40dp}.centered-page__controls>label>span:first-child{margin-right:4dp}.control-option{color:#ccc;transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out;display:flex;position:relative;flex-direction:row;align-items:center;justify-content:space-between;width:100%;height:auto;padding:4dp 16dp 4dp 20dp;border-radius:8dp;background-color:rgba(0,0,0,0)}.control-option svg{image-color:#ccc}.control-option svg{transition:image-color .05s linear-in-out,background-color .05s linear-in-out}.control-option:focus-visible:not(:disabled,[disabled]),.control-option:hover:not(:disabled,[disabled]){color:#f2f2f2;background-color:rgba(190,184,219,.1)}.control-option:focus-visible:not(:disabled,[disabled]) svg,.control-option:hover:not(:disabled,[disabled]) svg{image-color:#f2f2f2}.control-option:disabled,.control-option[disabled]{opacity:.5}[cur-binding-slot="0"] .control-option--active .control-option__binding[bind-slot="0"]{border-color:#f86039}[cur-binding-slot="0"] .control-option--active .control-option__binding[bind-slot="0"] .control-option__binding-icon{opacity:0}[cur-binding-slot="0"] .control-option--active .control-option__binding[bind-slot="0"] .control-option__binding-recording{opacity:1}[cur-binding-slot="1"] .control-option--active .control-option__binding[bind-slot="1"]{border-color:#f86039}[cur-binding-slot="1"] .control-option--active .control-option__binding[bind-slot="1"] .control-option__binding-icon{opacity:0}[cur-binding-slot="1"] .control-option--active .control-option__binding[bind-slot="1"] .control-option__binding-recording{opacity:1}.control-option .icon-button{flex:1 1 auto}.control-option__label{flex:2 1 300dp;height:auto;white-space:nowrap}.control-option__bindings{display:flex;position:relative;flex:2 1 400dp;flex-direction:row;align-items:center;justify-content:space-between;width:100%;height:56dp;padding:0 12dp 0 4dp}.control-option__binding{color:#ccc;transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out,border-color .05s linear-in-out;display:flex;position:relative;flex:1 1 100%;align-items:center;justify-content:center;width:100%;height:56dp;margin:0 4dp;padding:8dp;border-width:1.1dp;border-radius:8dp;border-color:rgba(190,184,219,.1);background-color:rgba(190,184,219,.1)}.control-option__binding svg{image-color:#ccc}.control-option__binding svg{transition:image-color .05s linear-in-out,background-color .05s linear-in-out}.control-option__binding:focus,.control-option__binding:hover{color:#f2f2f2;border-color:#f2f2f2;background-color:rgba(255,255,255,.1)}.control-option__binding:focus svg,.control-option__binding:hover svg{image-color:#f2f2f2}.control-option__binding:active{color:#f5f5f5}.control-option__binding:active svg{image-color:#f5f5f5}.control-option__binding:disabled,.control-option__binding[disabled]{color:#ccc;opacity:.5}.control-option__binding:disabled svg,.control-option__binding[disabled] svg{image-color:#ccc}.control-option__binding:not([disabled]){cursor:pointer}.control-option__binding-icon{transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out;opacity:1}@keyframes control-option__binding-recording-scale{0%{transform:scale(1)}50%{transform:scale(0.85)}100%{transform:scale(1)}}.control-option__binding-recording{transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out;display:flex;position:absolute;top:0;right:0;bottom:0;left:0;align-items:center;justify-content:center;opacity:0}.control-option__binding-recording .control-option__binding-circle{width:24dp;height:24dp;animation:1.5s sine-in-out infinite control-option__binding-recording-scale;border-radius:24dp;background-color:#f86039}.control-option__binding-recording .control-option__binding-edge{position:absolute;top:50%;left:50%;width:36dp;height:36dp;transform:translate(-50%, -50%)}.control-option__binding-recording .control-option__binding-edge>svg.control-option__binding-edge-svg{width:36dp;height:36dp;image-color:#f86039}.tabs tabs{display:flex;flex-direction:row;align-items:center;justify-content:flex-start}.tab{display:block;position:relative;margin:0;padding:20dp 24dp;transition:color .05s linear-in-out;opacity:.9;background-color:rgba(0,0,0,0);color:rgba(255,255,255,.6)}.tab:selected{color:#f2f2f2}.tab:selected .tab__indicator{background-color:rgba(255,255,255,.6)}.tab:selected:hover{cursor:default}.rmlui-window:not([mouse-active]) .tab:focus{transition:none;animation:blue-pulse .75s infinite}.rmlui-window:not([mouse-active]) .tab:focus:selected .tab__indicator{animation:blue-pulse-background .75s infinite}.tab:focus,.tab:hover{opacity:1;color:#f2f2f2;cursor:pointer}.tab__indicator{position:absolute;right:0;bottom:2dp;left:0;height:2dp;background-color:rgba(0,0,0,0)}.config__exit-button{position:absolute;top:8dp;right:8dp}.config__form{border-top-width:1.1dp;border-top-color:rgba(255,255,255,.1);display:flex;flex:1 1 100%;flex-direction:column;justify-content:space-between;width:100%;height:100%;border-bottom-right-radius:16dp;border-bottom-left-radius:16dp}.config__wrapper{flex:1 1 100%;width:auto;height:auto;padding:16dp;border-radius:0dp;background-color:rgba(0,0,0,.35);text-align:left}.config__wrapper p{padding:16dp;line-height:28dp;white-space:pre-line}.config__wrapper p b{color:#b97df2}.config__hz-wrapper{display:flex;flex:1 1 100%;flex-direction:row;width:100%;height:100%;border-radius:0dp;text-align:left}.config__header,.config__footer{display:flex;align-items:center;justify-content:space-between;width:100%;background-color:rgba(0,0,0,.35)}.config__header{border-bottom-width:1.1dp;border-bottom-color:rgba(255,255,255,.1);padding:12dp 20dp}.config__footer{border-top-width:1.1dp;border-top-color:rgba(255,255,255,.1);padding:20dp 20dp;border-bottom-right-radius:16dp;border-bottom-left-radius:16dp}.config__header-left{display:flex;flex:1 1 auto;flex-direction:row}.config__header-left>:not(:first-child){margin-left:8dp}.config__row{display:flex;flex-direction:row}.config-option{display:flex;flex:1;flex-direction:column;align-items:flex-start;justify-content:flex-start;margin:16dp 0dp 24dp}.config-option:last-child{margin-top:16dp}.config-option__title{padding:0 12dp}.config-option__list{display:flex;flex-direction:row;align-items:flex-start;justify-content:flex-start;width:100%;height:auto;padding:0}.config-option__list input:first-of-type{nav-left:none}.config-option__list input:last-of-type{nav-right:none}.config-option__list .config-option__tab-label{transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out;display:block;position:relative;height:auto;margin:4dp 12dp 0;padding:8dp 0;color:rgba(255,255,255,.6);tab-index:none}.config-option__list .config-option__tab-label:hover{color:#f2f2f2;cursor:pointer}.config-option__list input.radio{transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out;visibility:visible;width:0;height:0}.config-option__list input.radio:not(:disabled):checked+.config-option__tab-label{border-bottom:1dp;border-color:#f2f2f2;color:#f2f2f2}.config-option__list input.radio:not(:disabled):checked+.config-option__tab-label:hover{cursor:default}.rmlui-window:not([mouse-active]) .config-option__list input.radio:not(:disabled):focus+.config-option__tab-label{transition:none;animation:blue-pulse .75s infinite;border-color:#17d6e8;color:#17d6e8}.config-option__list input.radio:not(:disabled):focus+.config-option__tab-label,.config-option__list input.radio:not(:disabled):hover+.config-option__tab-label{color:#f2f2f2}.config-option__list input.radio:disabled+.config-option__tab-label{opacity:.5}.config-option__list input.radio:disabled+.config-option__tab-label:hover{cursor:default}.config-option__list input.range slidertrack{transition:color .05s linear-in-out,background-color .05s linear-in-out;height:2dp;margin-top:8dp;background-color:rgba(255,255,255,.2)}.config-option__list input.range sliderbar{transition:color .05s linear-in-out,background-color .05s linear-in-out;width:16dp;height:16dp;margin-top:1dp;margin-right:-8dp;margin-left:-8dp;transition:background-color .05s linear-in-out;border-radius:8dp;background-color:#ccc}.rmlui-window:not([mouse-active]) .config-option__list input.range sliderbar:focus{border-width:1.1dp;border-color:#33f;animation:blue-pulse-background .75s infinite}.config-option__list input.range sliderbar:hover{background-color:#f2f2f2;cursor:pointer}.config-option__list input.range sliderbar:active,.config-option__list input.range slidertrack:active+sliderbar{background-color:#17d6e8}.config-option__list input.range sliderarrowdec,.config-option__list input.range sliderarrowinc{display:none}.config-option__details{height:18dp;margin:14dp 12dp 0;color:#b97df2}.config-option__range-wrapper{max-width:360dp;margin-top:4dp}.config-option__range-label{display:block;width:56dp;margin:0 12dp;margin-right:16dp;padding:0;color:#f2f2f2;tab-index:none}.input-config{padding:0}.input-config__horizontal-split{display:flex;position:relative;flex-direction:row;height:100%}.input-config__mappings{display:block;flex:1 1 auto;min-width:640dp;height:100%}.input-config__mappings-scroll{display:block;width:100%;max-height:100%;overflow-y:auto}.input-config__mappings-wrapper{padding:8dp}.input-config__visual-wrapper{display:block;flex:1 1 100%;width:auto;max-width:1040.4444444444dp;height:auto;max-height:780.3333333333dp;margin:auto 0}.input-config__visual-aspect{position:relative;width:100%;margin:auto 0;padding-bottom:75%;background-color:rgba(0,0,0,.35)}.input-config__visual{display:flex;position:absolute;top:16dp;right:16dp;bottom:16dp;left:16dp;flex-direction:column;border-radius:108dp;background-color:rgba(255,255,255,.05)}.input-config__visual-half{display:flex;position:relative;flex:1 1 100%;flex-direction:row;padding:6%}.input-config__visual-half--bottom{align-items:flex-end;justify-content:space-between}.input-config__visual-quarter-left{display:flex;flex:1 1 50%;align-items:flex-start;justify-content:flex-start;width:auto}.input-config__visual-quarter-right{display:flex;flex:1 1 100%;align-items:flex-start;justify-content:flex-end}.input-config__visual-stick-wrapper{display:flex;position:absolute;top:0;right:0;bottom:0;left:0;align-items:center;justify-content:center}.input-viz{transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out;display:flex;position:relative;align-items:center;justify-content:center}.input-viz>svg:not(.input-viz__dpad-arrow){position:absolute;top:0;right:0;bottom:0;left:0}[cur-input=NONE] .input-viz[visual-input]{opacity:1}.input-viz[visual-input~=A]{opacity:.25}[cur-input=A] .input-viz[visual-input~=A]{opacity:1}.input-viz[visual-input~=B]{opacity:.25}[cur-input=B] .input-viz[visual-input~=B]{opacity:1}.input-viz[visual-input~=Z]{opacity:.25}[cur-input=Z] .input-viz[visual-input~=Z]{opacity:1}.input-viz[visual-input~=START]{opacity:.25}[cur-input=START] .input-viz[visual-input~=START]{opacity:1}.input-viz[visual-input~=DPAD_UP]{opacity:.25}[cur-input=DPAD_UP] .input-viz[visual-input~=DPAD_UP]{opacity:1}.input-viz[visual-input~=DPAD_DOWN]{opacity:.25}[cur-input=DPAD_DOWN] .input-viz[visual-input~=DPAD_DOWN]{opacity:1}.input-viz[visual-input~=DPAD_LEFT]{opacity:.25}[cur-input=DPAD_LEFT] .input-viz[visual-input~=DPAD_LEFT]{opacity:1}.input-viz[visual-input~=DPAD_RIGHT]{opacity:.25}[cur-input=DPAD_RIGHT] .input-viz[visual-input~=DPAD_RIGHT]{opacity:1}.input-viz[visual-input~=L]{opacity:.25}[cur-input=L] .input-viz[visual-input~=L]{opacity:1}.input-viz[visual-input~=R]{opacity:.25}[cur-input=R] .input-viz[visual-input~=R]{opacity:1}.input-viz[visual-input~=C_UP]{opacity:.25}[cur-input=C_UP] .input-viz[visual-input~=C_UP]{opacity:1}.input-viz[visual-input~=C_DOWN]{opacity:.25}[cur-input=C_DOWN] .input-viz[visual-input~=C_DOWN]{opacity:1}.input-viz[visual-input~=C_LEFT]{opacity:.25}[cur-input=C_LEFT] .input-viz[visual-input~=C_LEFT]{opacity:1}.input-viz[visual-input~=C_RIGHT]{opacity:.25}[cur-input=C_RIGHT] .input-viz[visual-input~=C_RIGHT]{opacity:1}.input-viz[visual-input~=X_AXIS_NEG]{opacity:.25}[cur-input=X_AXIS_NEG] .input-viz[visual-input~=X_AXIS_NEG]{opacity:1}.input-viz[visual-input~=X_AXIS_POS]{opacity:.25}[cur-input=X_AXIS_POS] .input-viz[visual-input~=X_AXIS_POS]{opacity:1}.input-viz[visual-input~=Y_AXIS_NEG]{opacity:.25}[cur-input=Y_AXIS_NEG] .input-viz[visual-input~=Y_AXIS_NEG]{opacity:1}.input-viz[visual-input~=Y_AXIS_POS]{opacity:.25}[cur-input=Y_AXIS_POS] .input-viz[visual-input~=Y_AXIS_POS]{opacity:1}.input-viz__button{color:#f2f2f2}.input-viz__button svg{image-color:#f2f2f2}.input-viz__button--sm{width:64dp;height:64dp}.input-viz__button--sm>svg{width:64dp;height:64dp}.input-viz__button--md{width:76dp;height:76dp}.input-viz__button--md>svg{width:76dp;height:76dp}.input-viz__button--lg{width:84dp;height:84dp}.input-viz__button--lg>svg{width:84dp;height:84dp}.input-viz__button--C svg{image-color:#e9cd35}.input-viz__button--A{margin-top:auto}.input-viz__button--A svg{image-color:#33f}.input-viz__button--B svg{image-color:#45d043}.input-viz__button--Start svg{image-color:#f86039}.input-viz__Z{width:136dp;height:136dp}.input-viz__Z svg{image-color:#e9cd35}.input-viz__Z>svg{width:136dp;height:136dp}.input-viz.input-viz__dpad{width:192dp;height:192dp;position:relative}.input-viz.input-viz__dpad svg{image-color:#f2f2f2}.input-viz.input-viz__dpad>svg{width:192dp;height:192dp}.input-config__visual-stick{display:flex;position:relative;align-items:center;justify-content:center;width:200dp;height:200dp;border-radius:100dp;background-color:rgba(255,255,255,.05)}.input-viz__dpad-split,.input-viz__stick-split{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;width:100%;height:100%}.input-viz__dpad-split--vertical,.input-viz__stick-split--vertical{flex-direction:column;align-items:center;justify-content:space-between}.input-viz__dpad-split--horizontal,.input-viz__stick-split--horizontal{flex-direction:row;align-items:center;justify-content:space-between}.input-viz__dpad-split>div,.input-viz__stick-split>div{display:flex;flex:1 1 100%;flex-direction:row;align-items:center;justify-content:center}.input-viz__dpad-split>div{width:64dp;height:64dp}.input-viz__stick-split>div{width:66.6666666667dp;height:66.6666666667dp}.input-viz__dpad-arrow{position:absolute;width:60dp;height:60dp}.input-viz__dpad-arrow--up{top:4dp;margin:0 auto}.input-viz__dpad-arrow--down{bottom:4dp;margin:0 auto;transform:rotate(180deg)}.input-viz__dpad-arrow--left{left:4dp;margin:auto 0;transform:rotate(-90deg)}.input-viz__dpad-arrow--right{right:4dp;margin:auto 0;transform:rotate(90deg)}.input-viz__R{width:96dp;height:96dp}.input-viz__R svg{image-color:#fff}.input-viz__R>svg{width:96dp;height:96dp}.input-viz__L{width:136dp;height:136dp}.input-viz__L svg{image-color:#17d6e8}.input-viz__L>svg{width:136dp;height:136dp}.input-config__c-buttons{position:relative;width:208dp;height:132dp}.input-config__c-buttons-lr,.input-config__c-buttons-du{display:flex;position:absolute;top:0;right:0;bottom:0;left:0}.input-config__c-buttons-lr{flex-direction:row;align-items:flex-start;justify-content:space-between}.input-config__c-buttons-du{flex-direction:column-reverse;align-items:center;justify-content:space-between}.input-config__c-buttons .input-viz[visual-input=C_UP]{margin-top:-32dp}.input-config__main-buttons{display:flex;position:relative;flex-direction:row;justify-content:space-between;width:268dp;height:128dp;margin-right:10dp}.button{border-color:rgba(185,125,242,.8);background-color:rgba(185,125,242,.05);color:#ccc;transition:color .05s linear-in-out,background-color .05s linear-in-out;display:block;width:auto;height:auto;padding:23dp;border-width:1.1dp;border-radius:12dp}.button:focus,.button:hover{border-color:#b97df2;background-color:rgba(185,125,242,.3);color:#f2f2f2}.button:disabled,.button[disabled]{color:rgba(255,255,255,.6)}.button:active{background-color:rgba(185,125,242,.2);color:#f5f5f5}.button--secondary{border-color:rgba(23,214,232,.8);background-color:rgba(23,214,232,.05);color:#ccc}.button--secondary:focus,.button--secondary:hover{border-color:#17d6e8;background-color:rgba(23,214,232,.3);color:#f2f2f2}.button--secondary:disabled,.button--secondary[disabled]{color:rgba(255,255,255,.6)}.button--secondary:active{background-color:rgba(23,214,232,.2);color:#f5f5f5}.button--tertiary{border-color:rgba(242,242,242,.8);background-color:rgba(242,242,242,.05);color:#ccc}.button--tertiary:focus,.button--tertiary:hover{border-color:#f2f2f2;background-color:rgba(242,242,242,.3);color:#f2f2f2}.button--tertiary:disabled,.button--tertiary[disabled]{color:rgba(255,255,255,.6)}.button--tertiary:active{background-color:rgba(242,242,242,.2);color:#f5f5f5}.button--success{border-color:rgba(69,208,67,.8);background-color:rgba(69,208,67,.05);color:#ccc}.button--success:focus,.button--success:hover{border-color:#45d043;background-color:rgba(69,208,67,.3);color:#f2f2f2}.button--success:disabled,.button--success[disabled]{color:rgba(255,255,255,.6)}.button--success:active{background-color:rgba(69,208,67,.2);color:#f5f5f5}.button--error{border-color:rgba(248,96,57,.8);background-color:rgba(248,96,57,.05);color:#ccc}.button--error:focus,.button--error:hover{border-color:#f86039;background-color:rgba(248,96,57,.3);color:#f2f2f2}.button--error:disabled,.button--error[disabled]{color:rgba(255,255,255,.6)}.button--error:active{background-color:rgba(248,96,57,.2);color:#f5f5f5}.button--warning{border-color:rgba(233,205,53,.8);background-color:rgba(233,205,53,.05);color:#ccc}.button--warning:focus,.button--warning:hover{border-color:#e9cd35;background-color:rgba(233,205,53,.3);color:#f2f2f2}.button--warning:disabled,.button--warning[disabled]{color:rgba(255,255,255,.6)}.button--warning:active{background-color:rgba(233,205,53,.2);color:#f5f5f5}.button:not([disabled]){cursor:pointer}.button:disabled,.button[disabled]{opacity:.5}.button__label{width:auto;height:auto}.icon-button{color:#ccc;transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out,border-color .05s linear-in-out;display:flex;align-items:center;justify-content:center;width:53.8dp;min-width:53.8dp;max-width:53.8dp;height:53.8dp;min-height:53.8dp;max-height:53.8dp;border-width:1.1dp;border-radius:26.9dp;border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0)}.icon-button svg{image-color:#ccc}.icon-button svg{transition:image-color .05s linear-in-out,background-color .05s linear-in-out}.icon-button:focus,.icon-button:hover{color:#f2f2f2;background-color:rgba(255,255,255,.2)}.icon-button:focus svg,.icon-button:hover svg{image-color:#f2f2f2}.icon-button:active{color:#f5f5f5;background-color:rgba(255,255,255,.1)}.icon-button:active svg{image-color:#f5f5f5}.icon-button:disabled,.icon-button[disabled]{color:#ccc;opacity:.5}.icon-button:disabled svg,.icon-button[disabled] svg{image-color:#ccc}.icon-button:not([disabled]){cursor:pointer}.icon-button svg{width:32dp;height:32dp}.icon-button--primary{border-color:rgba(185,125,242,.8);background-color:rgba(185,125,242,.05)}.icon-button--primary:focus,.icon-button--primary:hover{border-color:#b97df2;background-color:rgba(185,125,242,.3)}.icon-button--primary:active{background-color:rgba(185,125,242,.2)}.icon-button--secondary{border-color:rgba(23,214,232,.8);background-color:rgba(23,214,232,.05)}.icon-button--secondary:focus,.icon-button--secondary:hover{border-color:#17d6e8;background-color:rgba(23,214,232,.3)}.icon-button--secondary:active{background-color:rgba(23,214,232,.2)}.icon-button--tertiary{border-color:rgba(242,242,242,.8);background-color:rgba(242,242,242,.05)}.icon-button--tertiary:focus,.icon-button--tertiary:hover{border-color:#f2f2f2;background-color:rgba(242,242,242,.3)}.icon-button--tertiary:active{background-color:rgba(242,242,242,.2)}.icon-button--success{border-color:rgba(69,208,67,.8);background-color:rgba(69,208,67,.05)}.icon-button--success:focus,.icon-button--success:hover{border-color:#45d043;background-color:rgba(69,208,67,.3)}.icon-button--success:active{background-color:rgba(69,208,67,.2)}.icon-button--danger{border-color:rgba(248,96,57,.8);background-color:rgba(248,96,57,.05)}.icon-button--danger:focus,.icon-button--danger:hover{border-color:#f86039;background-color:rgba(248,96,57,.3)}.icon-button--danger:active{background-color:rgba(248,96,57,.2)}.icon-button--warning{border-color:rgba(233,205,53,.8);background-color:rgba(233,205,53,.05)}.icon-button--warning:focus,.icon-button--warning:hover{border-color:#e9cd35;background-color:rgba(233,205,53,.3)}.icon-button--warning:active{background-color:rgba(233,205,53,.2)}.launcher{display:block;position:relative;flex-direction:row;justify-content:space-between;width:100%;height:100%;background-color:#08070d}.launcher__vertical-split{display:flex;position:absolute;top:0;right:50%;bottom:0;left:0;flex-direction:column;align-items:flex-start;justify-content:space-between}.launcher__vertical-split--right{right:0;left:50%;align-items:flex-end}@keyframes slide-mm-bg-over{0%{transform:translateX(100dp)}100%{transform:translateX(0dp)}}.launcher__background-wrapper{display:flex;position:absolute;top:-55vw;right:-100%;bottom:-50vw;left:-70vw;align-items:center;justify-content:flex-start;transform:translateX(0dp);animation:25s cubic-out 1 slide-mm-bg-over}@keyframes fade-mm-in{0%{opacity:0}100%{opacity:.1}}.launcher__background-mm{position:absolute;top:0;bottom:0;left:0;width:auto;height:100%;animation:2.5s cubic-in-out 1 fade-mm-in;opacity:.1}.launcher__title-quadrant{flex:1 1 auto;width:auto;height:auto;padding-top:96dp;padding-left:96dp}.launcher__title-quadrant--right{padding-right:96dp;padding-left:0}.launcher__content-quadrant{display:flex;position:relative;flex:1 1 100%;flex-direction:column;align-items:flex-start;justify-content:flex-end;width:100%;height:auto;padding:32dp}.menu-list-item{color:#ccc;display:flex;flex-direction:row;align-items:center;width:100%;height:auto;padding:16dp;border-radius:8dp;background-color:rgba(0,0,0,0);cursor:pointer}.menu-list-item svg{image-color:#ccc}.menu-list-item--right{flex-direction:row-reverse;align-content:flex-end}.menu-list-item--right .menu-list-item__bullet{margin-left:12dp;opacity:1}.menu-list-item--right.menu-list-item:focus:not(:disabled,[disabled]),.menu-list-item--right.menu-list-item:hover:not(:disabled,[disabled]){decorator:horizontal-gradient(#7A2AC600 #DABAF714)}.menu-list-item:focus:not(:disabled,[disabled]),.menu-list-item:hover:not(:disabled,[disabled]){color:#b97df2;decorator:horizontal-gradient(#7A2AC614 #DABAF700)}.menu-list-item:focus:not(:disabled,[disabled]) svg,.menu-list-item:hover:not(:disabled,[disabled]) svg{image-color:#b97df2}.menu-list-item:focus:not(:disabled,[disabled]) .menu-list-item__bullet,.menu-list-item:hover:not(:disabled,[disabled]) .menu-list-item__bullet{opacity:1}.menu-list-item:disabled,.menu-list-item[disabled]{opacity:.5;tab-index:none;cursor:default}.menu-list-item__bullet{margin-right:12dp;opacity:0}.subtitle-title{display:block;position:relative;flex-direction:column;align-content:flex-start;align-items:flex-start;width:auto;height:auto;padding:0;background-color:rgba(0,0,0,0);color:#ccc;text-align:left;cursor:pointer}.subtitle-title--right{align-content:flex-end}.subtitle-title--right,.subtitle-title--right>*{text-align:right}.subtitle-title[selected]{color:#f2f2f2;cursor:default}.subtitle-title:focus:not(:disabled,[disabled]),.subtitle-title:hover:not(:disabled,[disabled],[selected]){color:#b97df2}.subtitle-title:disabled,.subtitle-title[disabled]{opacity:.5;cursor:default;tab-index:none}.subtitle-title h3{margin-bottom:6dp}.subtitle-title h1{margin-top:6dp}.subtitle-title__disclaimer{margin-top:16dp}.toggle{transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out;display:flex;position:relative;flex-direction:row;align-items:center;justify-content:space-between;width:162dp;height:72dp;border-radius:36dp;opacity:.9;background:rgba(0,0,0,0);cursor:pointer}.toggle:hover,.toggle:focus-visible,.toggle:focus{opacity:1;background-color:rgba(23,214,232,.3)}.toggle:active{opacity:1;background-color:rgba(23,214,232,.05)}.toggle .toggle__border{position:absolute;top:1.1dp;right:1.1dp;bottom:1.1dp;left:1.1dp;border-width:1.1dp;border-color:#a2eff6;display:block;border-radius:36dp}.toggle .toggle__floater{position:absolute;top:50%;left:4dp;width:80dp;height:64dp;transform:translateY(-50%);border-radius:32dp;background:#25a1ad}.toggle--checked .toggle__floater{left:78dp}.toggle--checked .toggle__icon.toggle__icon--left{opacity:.9;color:#a2eff6}.toggle--checked .toggle__icon.toggle__icon--right{opacity:1;color:#f2f2f2}.toggle__icons{display:flex;position:absolute;top:50%;right:16dp;left:16dp;align-items:center;justify-content:space-between;height:56dp;transform:translateY(-50%)}.toggle__icon{transition:color .05s linear-in-out,background-color .05s linear-in-out;display:flex;align-items:center;justify-content:center;width:56dp;height:56dp;color:#f2f2f2}.toggle__icon--right{opacity:1;color:#a2eff6}.bottom-left{display:flex;position:absolute;bottom:4dp;flex-direction:row;align-items:flex-start;justify-content:flex-start;width:100%;max-width:1692.4444444444dp;height:auto;margin:0 4dp}.prompt__overlay{background-color:rgba(190,184,219,.1);pointer-events:none}.prompt__overlay,.prompt__content-wrapper{position:absolute;top:0;right:0;bottom:0;left:0}.prompt__content-wrapper{display:flex;position:absolute;top:0;right:0;bottom:0;left:0;align-items:center;justify-content:center}.prompt__content{display:flex;position:relative;flex:1 1 100%;flex-direction:column;width:100%;max-width:700dp;height:auto;margin:auto;border-width:1.1dp;border-radius:16dp;border-color:rgba(255,255,255,.2);background:rgba(8,7,13,.9)}.prompt__content h3,.prompt__content p{margin:24dp}.prompt__content p{margin-top:0}.prompt__controls{display:flex;flex-direction:row;justify-content:center;padding:24dp 12dp;border-top-width:1.1dp;border-top-color:rgba(255,255,255,.1)}.prompt__controls .button{min-width:233.3333333333dp;margin:0 12dp;text-align:center;nav-up:none;nav-down:none}.config-debug{display:block;position:relative;width:100%;max-height:100%;padding:8dp}.config-debug__scroll{display:block;position:relative;width:100%;max-height:100%;overflow-y:auto}.config-debug-option{color:#ccc;transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out;border-bottom-width:1.1dp;border-bottom-color:rgba(255,255,255,.1);display:block;position:relative;flex-direction:column;width:100%;height:auto;padding:12dp 4dp;background-color:rgba(0,0,0,0)}.config-debug-option svg{image-color:#ccc}.config-debug-option svg{transition:image-color .05s linear-in-out,background-color .05s linear-in-out}.config-debug-option:focus:not(:disabled,[disabled]),.config-debug-option:focus-visible:not(:disabled,[disabled]),.config-debug-option:hover:not(:disabled,[disabled]){color:#f2f2f2;background-color:rgba(190,184,219,.1)}.config-debug-option:focus:not(:disabled,[disabled]) svg,.config-debug-option:focus-visible:not(:disabled,[disabled]) svg,.config-debug-option:hover:not(:disabled,[disabled]) svg{image-color:#f2f2f2}.config-debug-option:disabled,.config-debug-option[disabled]{opacity:.5}.config-debug-option .icon-button{margin-left:8dp}.config-debug__option-split{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.config-debug-option__label{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;padding:4dp 16dp 12dp;width:auto;height:auto;white-space:nowrap}.config-debug__option-controls{display:block;position:relative;flex:1 1 auto;height:auto;width:auto;max-width:800dp;padding:0 12dp}.config-debug__option-trigger{flex:1 1 auto}.config-debug__select-wrapper{display:flex;position:relative;flex-direction:row;align-items:center;justify-content:flex-start;flex:1 1 100%;width:auto;max-width:800dp;height:auto;padding:4dp}.config-debug__select-wrapper .config-debug__select-label{padding-right:16dp;flex:auto;width:196dp}.config-debug__select-wrapper .config-debug__select-label>div{display:inline;width:auto;height:auto}.config-debug__select-wrapper input{display:block;position:relative;box-sizing:border-box;padding:0;flex:1 1 100%;width:auto;height:20dp;margin:auto 0}.config-debug__select-wrapper select{transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out,border-color .05s linear-in-out;border-width:1.1dp;border-color:rgba(255,255,255,.5);display:block;position:relative;box-sizing:border-box;padding:0;flex:1 1 100%;width:auto;height:48dp;border-radius:12dp;background-color:rgba(255,255,255,.05);cursor:pointer;align-items:center;justify-content:flex-start;padding:14dp}.config-debug__select-wrapper select svg{transition:image-color .05s linear-in-out,background-color .05s linear-in-out}.config-debug__select-wrapper select:hover,.config-debug__select-wrapper select:focus{border-width:1.1dp;border-color:rgba(255,255,255,.8);background-color:rgba(255,255,255,.2)}.config-debug__select-wrapper select selectvalue{display:inline;margin:auto 0;height:auto}.config-debug__select-wrapper select selectbox{border-width:1.1dp;border-color:rgba(255,255,255,.8);background-color:#191622;padding:4dp 0;margin-top:2dp;border-radius:12dp}.config-debug__select-wrapper select selectbox option{transition:color .05s linear-in-out,background-color .05s linear-in-out;padding:8dp 12dp;background-color:rgba(0,0,0,0);color:#ccc;font-weight:400}.config-debug__select-wrapper select selectbox option:hover,.config-debug__select-wrapper select selectbox option:focus{background-color:rgba(255,255,255,.2)}.config-debug__select-wrapper select selectbox option:hover:not(:checked){cursor:pointer}.config-debug__select-wrapper select selectbox option:checked{color:#fff;background-color:rgba(255,255,255,.05)}body{box-sizing:border-box;color:#f2f2f2;font-family:chiaro}.rmlui-window{opacity:1}.rmlui-window--hidden{opacity:0}.rmlui-window:not([mouse-active]){pointer-events:none}*,*:before,*:after{box-sizing:border-box}button{background-color:#7a2ac6}@keyframes blue-pulse{0%{color:#17d6e8}50%{color:#a2eff6}100%{color:#17d6e8}}@keyframes blue-pulse-with-border{0%{border-color:#17d6e8;color:#17d6e8}50%{border-color:#a2eff6;color:#a2eff6}100%{border-color:#17d6e8;color:#17d6e8}}@keyframes blue-pulse-background{0%{background-color:#17d6e8}50%{background-color:#a2eff6}100%{background-color:#17d6e8}}
+h1{font-size:68dp;letter-spacing:4.76dp;line-height:68dp;font-style:normal;font-weight:700}h2{font-size:52dp;letter-spacing:3.64dp;line-height:52dp;font-style:normal;font-weight:700}h3,.tab{font-size:36dp;letter-spacing:2.52dp;line-height:36dp;font-style:normal;font-weight:700}.label-lg,.menu-list-item__label,.button--large{font-size:36dp;letter-spacing:3.96dp;line-height:36dp;font-style:normal;font-weight:700}.label-md,.config-debug-option__label,.button,.config-option__title,.control-option__label{font-size:28dp;letter-spacing:3.08dp;line-height:28dp;font-style:normal;font-weight:700}.label-sm,.config-debug__select-wrapper .config-debug__select-label,.subtitle-title__disclaimer,.config-option__range-label,.config-option__list .config-option__tab-label,.centered-page__controls>label{font-size:20dp;letter-spacing:2.8dp;line-height:20dp;font-style:normal;font-weight:700;text-transform:uppercase}.config-option__details{font-size:18dp;letter-spacing:2.52dp;line-height:18dp;font-style:normal;font-weight:400}body,.config-debug__select-wrapper select,.config-debug__select-wrapper input,.config__wrapper p{font-size:20dp;letter-spacing:0dp;line-height:20dp;font-style:normal;font-weight:400}.toggle__icon{font-family:promptfont;font-size:56dp;font-style:normal;font-weight:400;line-height:56dp}.prompt-font{font-family:promptfont;font-size:40dp;font-style:normal;font-weight:400;line-height:40dp}.prompt-font-sm,.input-viz__mappings div{font-family:promptfont;font-size:32dp;font-style:normal;font-weight:400;line-height:32dp}.nav-vert,.nav-dir,.nav-all,.config-debug__select-wrapper select selectbox option,.config-debug__select-wrapper select,.config-debug__select-wrapper input,.toggle,.subtitle-title:not(:disabled,[disabled]),.menu-list-item:not(:disabled,[disabled]),.icon-button:not([disabled]),.button:not([disabled]),.button,.config-option__list input.radio,.tab,.control-option__binding:not([disabled]),.centered-page__modal{nav-up:auto;nav-down:auto}.nav-horiz,.nav-dir,.nav-all,.config-debug__select-wrapper select selectbox option,.config-debug__select-wrapper select,.config-debug__select-wrapper input,.toggle,.subtitle-title:not(:disabled,[disabled]),.menu-list-item:not(:disabled,[disabled]),.icon-button:not([disabled]),.button:not([disabled]),.button,.config-option__list input.radio,.tab,.control-option__binding:not([disabled]),.centered-page__modal{nav-right:auto;nav-left:auto}.nav-foc,.nav-all,.config-debug__select-wrapper select selectbox option,.config-debug__select-wrapper select,.config-debug__select-wrapper input,.toggle,.subtitle-title:not(:disabled,[disabled]),.menu-list-item:not(:disabled,[disabled]),.icon-button:not([disabled]),.button:not([disabled]),.button,.config-option__list input.radio,.tab,.control-option__binding:not([disabled]),.centered-page__modal{focus:auto;tab-index:auto}h1{font-size:68dp;letter-spacing:4.76dp;line-height:68dp;font-style:normal;font-weight:700}h2{font-size:52dp;letter-spacing:3.64dp;line-height:52dp;font-style:normal;font-weight:700}h3,.tab{font-size:36dp;letter-spacing:2.52dp;line-height:36dp;font-style:normal;font-weight:700}.label-lg,.menu-list-item__label,.button--large{font-size:36dp;letter-spacing:3.96dp;line-height:36dp;font-style:normal;font-weight:700}.label-md,.config-debug-option__label,.button,.config-option__title,.control-option__label{font-size:28dp;letter-spacing:3.08dp;line-height:28dp;font-style:normal;font-weight:700}.label-sm,.config-debug__select-wrapper .config-debug__select-label,.subtitle-title__disclaimer,.config-option__range-label,.config-option__list .config-option__tab-label,.centered-page__controls>label{font-size:20dp;letter-spacing:2.8dp;line-height:20dp;font-style:normal;font-weight:700;text-transform:uppercase}.config-option__details{font-size:18dp;letter-spacing:2.52dp;line-height:18dp;font-style:normal;font-weight:400}body,.config-debug__select-wrapper select,.config-debug__select-wrapper input,.config__wrapper p{font-size:20dp;letter-spacing:0dp;line-height:20dp;font-style:normal;font-weight:400}.toggle__icon{font-family:promptfont;font-size:56dp;font-style:normal;font-weight:400;line-height:56dp}.prompt-font{font-family:promptfont;font-size:40dp;font-style:normal;font-weight:400;line-height:40dp}.prompt-font-sm,.input-viz__mappings div{font-family:promptfont;font-size:32dp;font-style:normal;font-weight:400;line-height:32dp}.nav-vert,.nav-dir,.nav-all,.config-debug__select-wrapper select selectbox option,.config-debug__select-wrapper select,.config-debug__select-wrapper input,.toggle,.subtitle-title:not(:disabled,[disabled]),.menu-list-item:not(:disabled,[disabled]),.icon-button:not([disabled]),.button:not([disabled]),.button,.config-option__list input.radio,.tab,.control-option__binding:not([disabled]),.centered-page__modal{nav-up:auto;nav-down:auto}.nav-horiz,.nav-dir,.nav-all,.config-debug__select-wrapper select selectbox option,.config-debug__select-wrapper select,.config-debug__select-wrapper input,.toggle,.subtitle-title:not(:disabled,[disabled]),.menu-list-item:not(:disabled,[disabled]),.icon-button:not([disabled]),.button:not([disabled]),.button,.config-option__list input.radio,.tab,.control-option__binding:not([disabled]),.centered-page__modal{nav-right:auto;nav-left:auto}.nav-foc,.nav-all,.config-debug__select-wrapper select selectbox option,.config-debug__select-wrapper select,.config-debug__select-wrapper input,.toggle,.subtitle-title:not(:disabled,[disabled]),.menu-list-item:not(:disabled,[disabled]),.icon-button:not([disabled]),.button:not([disabled]),.button,.config-option__list input.radio,.tab,.control-option__binding:not([disabled]),.centered-page__modal{focus:auto;tab-index:auto}*{box-sizing:border-box}hr{display:block;padding:1.5dp;background:#08070d}body{color:#fff;font-family:chiaro;font-size:20dp;font-style:normal;font-weight:normal}div#window{position:relative;box-sizing:border-box;width:100%;height:100%;border-color:rgba(255,255,255,.2);background-color:#121018}div#content{z-index:2;width:auto;height:100%;overflow:hidden auto;text-align:center}p{text-align:left}input.submit{margin-left:0}input.text,input.password{box-sizing:border-box;height:31dp;padding:11dp 10dp 0;text-align:left;cursor:text}textarea{padding:14dp 12dp 10dp;text-align:left;cursor:text}input.text,input.password,select,textarea{height:auto}table input.text{box-sizing:border-box;width:100%;height:auto;margin:0;border-width:1.1dp;border-color:#000;background-color:#fff;font-size:15dp;line-height:1;decorator:none}input.radio,input.checkbox{flex:0;width:0dp;nav-up:auto;nav-right:auto;nav-down:auto;nav-left:auto;tab-index:auto;focus:auto}scrollbarvertical,scrollbarhorizontal{margin:0;border:0}scrollbarvertical slidertrack,scrollbarhorizontal slidertrack{background:#dabaf7;opacity:.05}scrollbarvertical sliderbar,scrollbarhorizontal sliderbar{border-radius:5dp;background:#dabaf7;opacity:.1}scrollbarvertical sliderbar:hover:not(:active),scrollbarhorizontal sliderbar:hover:not(:active){opacity:.2}scrollbarvertical sliderbar:active,scrollbarhorizontal sliderbar:active{opacity:.3}scrollbarvertical sliderarrowdec,scrollbarvertical sliderarrowinc,scrollbarhorizontal sliderarrowdec,scrollbarhorizontal sliderarrowinc{width:0;height:0}scrollbarvertical{width:12dp}scrollbarvertical slidertrack{width:12dp}scrollbarvertical sliderbar{width:12dp}scrollbarhorizontal{height:12dp}scrollbarhorizontal slidertrack{height:12dp}scrollbarhorizontal sliderbar{height:12dp}.centered-page{display:flex;position:absolute;top:0;right:0;bottom:0;left:0;padding:64dp;background-color:rgba(255,255,255,.1)}.centered-page__modal{display:flex;position:relative;flex:1 1 100%;flex-direction:column;width:100%;max-width:1692.4444444444dp;height:100%;margin:auto;border-width:1.1dp;border-radius:16dp;border-color:rgba(255,255,255,.2);background:rgba(8,7,13,.9)}.centered-page__modal>.tabs{display:flex;position:relative;flex:1 1 100%;flex-direction:column;width:100%;max-width:1692.4444444444dp;height:100%;margin:auto}.centered-page__modal panels{flex:1 1 100%}.centered-page__controls{display:flex;position:absolute;bottom:24dp;flex-direction:row;align-items:center;justify-content:center;width:100%;max-width:1692.4444444444dp;height:auto;margin:0 auto}.centered-page__controls>label{display:inline-block;align-items:center;justify-content:space-between;width:auto;height:24dp}.centered-page__controls>label:not(:last-child){margin-right:40dp}.centered-page__controls>label>span:first-child{margin-right:4dp}.control-option{color:#ccc;transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out;display:flex;position:relative;flex-direction:row;align-items:center;justify-content:space-between;width:100%;height:auto;padding:4dp 16dp 4dp 20dp;border-radius:8dp;background-color:rgba(0,0,0,0)}.control-option svg{image-color:#ccc}.control-option svg{transition:image-color .05s linear-in-out,background-color .05s linear-in-out}.control-option:focus-visible:not(:disabled,[disabled]),.control-option:hover:not(:disabled,[disabled]){color:#f2f2f2;background-color:rgba(190,184,219,.1)}.control-option:focus-visible:not(:disabled,[disabled]) svg,.control-option:hover:not(:disabled,[disabled]) svg{image-color:#f2f2f2}.control-option:disabled,.control-option[disabled]{opacity:.5}[cur-binding-slot="0"] .control-option--active .control-option__binding[bind-slot="0"]{border-color:#f86039}[cur-binding-slot="0"] .control-option--active .control-option__binding[bind-slot="0"] .control-option__binding-icon{opacity:0}[cur-binding-slot="0"] .control-option--active .control-option__binding[bind-slot="0"] .control-option__binding-recording{opacity:1}[cur-binding-slot="1"] .control-option--active .control-option__binding[bind-slot="1"]{border-color:#f86039}[cur-binding-slot="1"] .control-option--active .control-option__binding[bind-slot="1"] .control-option__binding-icon{opacity:0}[cur-binding-slot="1"] .control-option--active .control-option__binding[bind-slot="1"] .control-option__binding-recording{opacity:1}.control-option .icon-button{flex:1 1 auto}.control-option__label{flex:2 1 300dp;height:auto;white-space:nowrap}.control-option__bindings{display:flex;position:relative;flex:2 1 400dp;flex-direction:row;align-items:center;justify-content:space-between;width:100%;height:56dp;padding:0 12dp 0 4dp}.control-option__binding{color:#ccc;transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out,border-color .05s linear-in-out;display:flex;position:relative;flex:1 1 100%;align-items:center;justify-content:center;width:100%;height:56dp;margin:0 4dp;padding:8dp;border-width:1.1dp;border-radius:8dp;border-color:rgba(190,184,219,.1);background-color:rgba(190,184,219,.1)}.control-option__binding svg{image-color:#ccc}.control-option__binding svg{transition:image-color .05s linear-in-out,background-color .05s linear-in-out}.control-option__binding:focus,.control-option__binding:hover{color:#f2f2f2;border-color:#f2f2f2;background-color:rgba(255,255,255,.1)}.control-option__binding:focus svg,.control-option__binding:hover svg{image-color:#f2f2f2}.control-option__binding:active{color:#f5f5f5}.control-option__binding:active svg{image-color:#f5f5f5}.control-option__binding:disabled,.control-option__binding[disabled]{color:#ccc;opacity:.5}.control-option__binding:disabled svg,.control-option__binding[disabled] svg{image-color:#ccc}.control-option__binding:not([disabled]){cursor:pointer}.control-option__binding-icon{transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out;opacity:1}@keyframes control-option__binding-recording-scale{0%{transform:scale(1)}50%{transform:scale(0.85)}100%{transform:scale(1)}}.control-option__binding-recording{transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out;display:flex;position:absolute;top:0;right:0;bottom:0;left:0;align-items:center;justify-content:center;opacity:0}.control-option__binding-recording .control-option__binding-circle{width:24dp;height:24dp;animation:1.5s sine-in-out infinite control-option__binding-recording-scale;border-radius:24dp;background-color:#f86039}.control-option__binding-recording .control-option__binding-edge{position:absolute;top:50%;left:50%;width:36dp;height:36dp;transform:translate(-50%, -50%)}.control-option__binding-recording .control-option__binding-edge>svg.control-option__binding-edge-svg{width:36dp;height:36dp;image-color:#f86039}.tabs tabs{display:flex;flex-direction:row;align-items:center;justify-content:flex-start}.tab{display:block;position:relative;margin:0;padding:20dp 24dp;transition:color .05s linear-in-out;opacity:.9;background-color:rgba(0,0,0,0);color:rgba(255,255,255,.6)}.tab:selected{color:#f2f2f2}.tab:selected .tab__indicator{background-color:rgba(255,255,255,.6)}.tab:selected:hover{cursor:default}.rmlui-window:not([mouse-active]) .tab:focus{transition:none;animation:blue-pulse .75s infinite}.rmlui-window:not([mouse-active]) .tab:focus:selected .tab__indicator{animation:blue-pulse-background .75s infinite}.tab:focus,.tab:hover{opacity:1;color:#f2f2f2;cursor:pointer}.tab__indicator{position:absolute;right:0;bottom:2dp;left:0;height:2dp;background-color:rgba(0,0,0,0)}.config__icon-buttons{display:flex;position:absolute;top:8dp;right:0dp;flex-direction:row;align-items:center;justify-content:flex-end;width:auto}.config__icon-buttons .icon-button{margin:0 8dp}.config__form{border-top-width:1.1dp;border-top-color:rgba(255,255,255,.1);display:flex;flex:1 1 100%;flex-direction:column;justify-content:space-between;width:100%;height:100%;border-bottom-right-radius:16dp;border-bottom-left-radius:16dp}.config__wrapper{flex:1 1 100%;width:auto;height:auto;padding:16dp;border-radius:0dp;background-color:rgba(0,0,0,.35);text-align:left}.config__wrapper p{padding:16dp;line-height:28dp;white-space:pre-line}.config__wrapper p b{color:#b97df2}.config__hz-wrapper{display:flex;flex:1 1 100%;flex-direction:row;width:100%;height:100%;border-radius:0dp;text-align:left}.config__header,.config__footer{display:flex;align-items:center;justify-content:space-between;width:100%;background-color:rgba(0,0,0,.35)}.config__header{border-bottom-width:1.1dp;border-bottom-color:rgba(255,255,255,.1);padding:12dp 20dp}.config__footer{border-top-width:1.1dp;border-top-color:rgba(255,255,255,.1);padding:20dp 20dp;border-bottom-right-radius:16dp;border-bottom-left-radius:16dp}.config__header-left{display:flex;flex:1 1 auto;flex-direction:row}.config__header-left>:not(:first-child){margin-left:8dp}.config__row{display:flex;flex-direction:row}.config-option{display:flex;flex:1;flex-direction:column;align-items:flex-start;justify-content:flex-start;margin:16dp 0dp 24dp}.config-option:last-child{margin-top:16dp}.config-option__title{padding:0 12dp}.config-option__list{display:flex;flex-direction:row;align-items:flex-start;justify-content:flex-start;width:100%;height:auto;padding:0}.config-option__list input:first-of-type{nav-left:none}.config-option__list input:last-of-type{nav-right:none}.config-option__list .config-option__tab-label{transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out;display:block;position:relative;height:auto;margin:4dp 12dp 0;padding:8dp 0;color:rgba(255,255,255,.6);tab-index:none}.config-option__list .config-option__tab-label:hover{color:#f2f2f2;cursor:pointer}.config-option__list input.radio{transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out;visibility:visible;width:0;height:0}.config-option__list input.radio:not(:disabled):checked+.config-option__tab-label{border-bottom:1dp;border-color:#f2f2f2;color:#f2f2f2}.config-option__list input.radio:not(:disabled):checked+.config-option__tab-label:hover{cursor:default}.rmlui-window:not([mouse-active]) .config-option__list input.radio:not(:disabled):focus+.config-option__tab-label{transition:none;animation:blue-pulse .75s infinite;border-color:#17d6e8;color:#17d6e8}.config-option__list input.radio:not(:disabled):focus+.config-option__tab-label,.config-option__list input.radio:not(:disabled):hover+.config-option__tab-label{color:#f2f2f2}.config-option__list input.radio:disabled+.config-option__tab-label{opacity:.5}.config-option__list input.radio:disabled+.config-option__tab-label:hover{cursor:default}.config-option__list input.range slidertrack{transition:color .05s linear-in-out,background-color .05s linear-in-out;height:2dp;margin-top:8dp;background-color:rgba(255,255,255,.2)}.config-option__list input.range sliderbar{transition:color .05s linear-in-out,background-color .05s linear-in-out;width:16dp;height:16dp;margin-top:1dp;margin-right:-8dp;margin-left:-8dp;transition:background-color .05s linear-in-out;border-radius:8dp;background-color:#ccc}.rmlui-window:not([mouse-active]) .config-option__list input.range sliderbar:focus{border-width:1.1dp;border-color:#33f;animation:blue-pulse-background .75s infinite}.config-option__list input.range sliderbar:hover{background-color:#f2f2f2;cursor:pointer}.config-option__list input.range sliderbar:active,.config-option__list input.range slidertrack:active+sliderbar{background-color:#17d6e8}.config-option__list input.range sliderarrowdec,.config-option__list input.range sliderarrowinc{display:none}.config-option__details{height:18dp;margin:14dp 12dp 0;color:#b97df2}.config-option__range-wrapper{max-width:360dp;margin-top:4dp}.config-option__range-label{display:block;width:56dp;margin:0 12dp;margin-right:16dp;padding:0;color:#f2f2f2;tab-index:none}.input-config{padding:0}.input-config__horizontal-split{display:flex;position:relative;flex-direction:row;height:100%}.input-config__mappings{display:block;flex:1 1 auto;min-width:640dp;height:100%}.input-config__mappings-scroll{display:block;width:100%;max-height:100%;overflow-y:auto}.input-config__mappings-wrapper{padding:8dp}.input-config__visual-wrapper{display:block;flex:1 1 100%;width:auto;max-width:1040.4444444444dp;height:auto;max-height:780.3333333333dp;margin:auto 0}.input-config__visual-aspect{position:relative;width:100%;margin:auto 0;padding-bottom:75%;background-color:rgba(0,0,0,.35)}.input-config__visual{display:flex;position:absolute;top:16dp;right:16dp;bottom:16dp;left:16dp;flex-direction:column;border-radius:108dp;background-color:rgba(255,255,255,.05)}.input-config__visual-half{display:flex;position:relative;flex:1 1 100%;flex-direction:row;padding:6%}.input-config__visual-half--bottom{align-items:flex-end;justify-content:space-between}.input-config__visual-quarter-left{display:flex;flex:1 1 50%;align-items:flex-start;justify-content:flex-start;width:auto}.input-config__visual-quarter-right{display:flex;flex:1 1 100%;align-items:flex-start;justify-content:flex-end}.input-config__visual-stick-wrapper{display:flex;position:absolute;top:0;right:0;bottom:0;left:0;align-items:center;justify-content:center}.input-viz{transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out;display:flex;position:relative;align-items:center;justify-content:center}.input-viz>svg:not(.input-viz__dpad-arrow){position:absolute;top:0;right:0;bottom:0;left:0}[cur-input=NONE] .input-viz[visual-input]{opacity:1}.input-viz[visual-input~=A]{opacity:.25}[cur-input=A] .input-viz[visual-input~=A]{opacity:1}.input-viz[visual-input~=B]{opacity:.25}[cur-input=B] .input-viz[visual-input~=B]{opacity:1}.input-viz[visual-input~=Z]{opacity:.25}[cur-input=Z] .input-viz[visual-input~=Z]{opacity:1}.input-viz[visual-input~=START]{opacity:.25}[cur-input=START] .input-viz[visual-input~=START]{opacity:1}.input-viz[visual-input~=DPAD_UP]{opacity:.25}[cur-input=DPAD_UP] .input-viz[visual-input~=DPAD_UP]{opacity:1}.input-viz[visual-input~=DPAD_DOWN]{opacity:.25}[cur-input=DPAD_DOWN] .input-viz[visual-input~=DPAD_DOWN]{opacity:1}.input-viz[visual-input~=DPAD_LEFT]{opacity:.25}[cur-input=DPAD_LEFT] .input-viz[visual-input~=DPAD_LEFT]{opacity:1}.input-viz[visual-input~=DPAD_RIGHT]{opacity:.25}[cur-input=DPAD_RIGHT] .input-viz[visual-input~=DPAD_RIGHT]{opacity:1}.input-viz[visual-input~=L]{opacity:.25}[cur-input=L] .input-viz[visual-input~=L]{opacity:1}.input-viz[visual-input~=R]{opacity:.25}[cur-input=R] .input-viz[visual-input~=R]{opacity:1}.input-viz[visual-input~=C_UP]{opacity:.25}[cur-input=C_UP] .input-viz[visual-input~=C_UP]{opacity:1}.input-viz[visual-input~=C_DOWN]{opacity:.25}[cur-input=C_DOWN] .input-viz[visual-input~=C_DOWN]{opacity:1}.input-viz[visual-input~=C_LEFT]{opacity:.25}[cur-input=C_LEFT] .input-viz[visual-input~=C_LEFT]{opacity:1}.input-viz[visual-input~=C_RIGHT]{opacity:.25}[cur-input=C_RIGHT] .input-viz[visual-input~=C_RIGHT]{opacity:1}.input-viz[visual-input~=X_AXIS_NEG]{opacity:.25}[cur-input=X_AXIS_NEG] .input-viz[visual-input~=X_AXIS_NEG]{opacity:1}.input-viz[visual-input~=X_AXIS_POS]{opacity:.25}[cur-input=X_AXIS_POS] .input-viz[visual-input~=X_AXIS_POS]{opacity:1}.input-viz[visual-input~=Y_AXIS_NEG]{opacity:.25}[cur-input=Y_AXIS_NEG] .input-viz[visual-input~=Y_AXIS_NEG]{opacity:1}.input-viz[visual-input~=Y_AXIS_POS]{opacity:.25}[cur-input=Y_AXIS_POS] .input-viz[visual-input~=Y_AXIS_POS]{opacity:1}.input-viz__button{color:#f2f2f2}.input-viz__button svg{image-color:#f2f2f2}.input-viz__button--sm{width:64dp;height:64dp}.input-viz__button--sm>svg{width:64dp;height:64dp}.input-viz__button--md{width:76dp;height:76dp}.input-viz__button--md>svg{width:76dp;height:76dp}.input-viz__button--lg{width:84dp;height:84dp}.input-viz__button--lg>svg{width:84dp;height:84dp}.input-viz__button--C svg{image-color:#e9cd35}.input-viz__button--A{margin-top:auto}.input-viz__button--A svg{image-color:#33f}.input-viz__button--B svg{image-color:#45d043}.input-viz__button--Start svg{image-color:#f86039}.input-viz__Z{width:136dp;height:136dp}.input-viz__Z svg{image-color:#e9cd35}.input-viz__Z>svg{width:136dp;height:136dp}.input-viz.input-viz__dpad{width:192dp;height:192dp;position:relative}.input-viz.input-viz__dpad svg{image-color:#f2f2f2}.input-viz.input-viz__dpad>svg{width:192dp;height:192dp}.input-config__visual-stick{display:flex;position:relative;align-items:center;justify-content:center;width:200dp;height:200dp;border-radius:100dp;background-color:rgba(255,255,255,.05)}.input-viz__dpad-split,.input-viz__stick-split{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;width:100%;height:100%}.input-viz__dpad-split--vertical,.input-viz__stick-split--vertical{flex-direction:column;align-items:center;justify-content:space-between}.input-viz__dpad-split--horizontal,.input-viz__stick-split--horizontal{flex-direction:row;align-items:center;justify-content:space-between}.input-viz__dpad-split>div,.input-viz__stick-split>div{display:flex;flex:1 1 100%;flex-direction:row;align-items:center;justify-content:center}.input-viz__dpad-split>div{width:64dp;height:64dp}.input-viz__stick-split>div{width:66.6666666667dp;height:66.6666666667dp}.input-viz__dpad-arrow{position:absolute;width:60dp;height:60dp}.input-viz__dpad-arrow--up{top:4dp;margin:0 auto}.input-viz__dpad-arrow--down{bottom:4dp;margin:0 auto;transform:rotate(180deg)}.input-viz__dpad-arrow--left{left:4dp;margin:auto 0;transform:rotate(-90deg)}.input-viz__dpad-arrow--right{right:4dp;margin:auto 0;transform:rotate(90deg)}.input-viz__R{width:96dp;height:96dp}.input-viz__R svg{image-color:#fff}.input-viz__R>svg{width:96dp;height:96dp}.input-viz__L{width:136dp;height:136dp}.input-viz__L svg{image-color:#17d6e8}.input-viz__L>svg{width:136dp;height:136dp}.input-config__c-buttons{position:relative;width:208dp;height:132dp}.input-config__c-buttons-lr,.input-config__c-buttons-du{display:flex;position:absolute;top:0;right:0;bottom:0;left:0}.input-config__c-buttons-lr{flex-direction:row;align-items:flex-start;justify-content:space-between}.input-config__c-buttons-du{flex-direction:column-reverse;align-items:center;justify-content:space-between}.input-config__c-buttons .input-viz[visual-input=C_UP]{margin-top:-32dp}.input-config__main-buttons{display:flex;position:relative;flex-direction:row;justify-content:space-between;width:268dp;height:128dp;margin-right:10dp}.button{border-color:rgba(185,125,242,.8);background-color:rgba(185,125,242,.05);color:#ccc;transition:color .05s linear-in-out,background-color .05s linear-in-out;display:block;width:auto;height:auto;padding:23dp;border-width:1.1dp;border-radius:12dp}.button:focus,.button:hover{border-color:#b97df2;background-color:rgba(185,125,242,.3);color:#f2f2f2}.button:disabled,.button[disabled]{color:rgba(255,255,255,.6)}.button:active{background-color:rgba(185,125,242,.2);color:#f5f5f5}.button--primary{border-color:rgba(185,125,242,.8);background-color:rgba(185,125,242,.05);color:#ccc}.button--primary:focus,.button--primary:hover{border-color:#b97df2;background-color:rgba(185,125,242,.3);color:#f2f2f2}.button--primary:disabled,.button--primary[disabled]{color:rgba(255,255,255,.6)}.button--primary:active{background-color:rgba(185,125,242,.2);color:#f5f5f5}.button--secondary{border-color:rgba(23,214,232,.8);background-color:rgba(23,214,232,.05);color:#ccc}.button--secondary:focus,.button--secondary:hover{border-color:#17d6e8;background-color:rgba(23,214,232,.3);color:#f2f2f2}.button--secondary:disabled,.button--secondary[disabled]{color:rgba(255,255,255,.6)}.button--secondary:active{background-color:rgba(23,214,232,.2);color:#f5f5f5}.button--tertiary{border-color:rgba(242,242,242,.8);background-color:rgba(242,242,242,.05);color:#ccc}.button--tertiary:focus,.button--tertiary:hover{border-color:#f2f2f2;background-color:rgba(242,242,242,.3);color:#f2f2f2}.button--tertiary:disabled,.button--tertiary[disabled]{color:rgba(255,255,255,.6)}.button--tertiary:active{background-color:rgba(242,242,242,.2);color:#f5f5f5}.button--success{border-color:rgba(69,208,67,.8);background-color:rgba(69,208,67,.05);color:#ccc}.button--success:focus,.button--success:hover{border-color:#45d043;background-color:rgba(69,208,67,.3);color:#f2f2f2}.button--success:disabled,.button--success[disabled]{color:rgba(255,255,255,.6)}.button--success:active{background-color:rgba(69,208,67,.2);color:#f5f5f5}.button--error{border-color:rgba(248,96,57,.8);background-color:rgba(248,96,57,.05);color:#ccc}.button--error:focus,.button--error:hover{border-color:#f86039;background-color:rgba(248,96,57,.3);color:#f2f2f2}.button--error:disabled,.button--error[disabled]{color:rgba(255,255,255,.6)}.button--error:active{background-color:rgba(248,96,57,.2);color:#f5f5f5}.button--warning{border-color:rgba(233,205,53,.8);background-color:rgba(233,205,53,.05);color:#ccc}.button--warning:focus,.button--warning:hover{border-color:#e9cd35;background-color:rgba(233,205,53,.3);color:#f2f2f2}.button--warning:disabled,.button--warning[disabled]{color:rgba(255,255,255,.6)}.button--warning:active{background-color:rgba(233,205,53,.2);color:#f5f5f5}.button:not([disabled]){cursor:pointer}.button:disabled,.button[disabled]{opacity:.5}.button__label{width:auto;height:auto}.icon-button{color:#ccc;transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out,border-color .05s linear-in-out;display:flex;align-items:center;justify-content:center;width:53.8dp;min-width:53.8dp;max-width:53.8dp;height:53.8dp;min-height:53.8dp;max-height:53.8dp;border-width:1.1dp;border-radius:26.9dp;border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0)}.icon-button svg{image-color:#ccc}.icon-button svg{transition:image-color .05s linear-in-out,background-color .05s linear-in-out}.icon-button:focus,.icon-button:hover{color:#f2f2f2;background-color:rgba(255,255,255,.2)}.icon-button:focus svg,.icon-button:hover svg{image-color:#f2f2f2}.icon-button:active{color:#f5f5f5;background-color:rgba(255,255,255,.1)}.icon-button:active svg{image-color:#f5f5f5}.icon-button:disabled,.icon-button[disabled]{color:#ccc;opacity:.5}.icon-button:disabled svg,.icon-button[disabled] svg{image-color:#ccc}.icon-button:not([disabled]){cursor:pointer}.icon-button svg{width:32dp;height:32dp}.icon-button--primary{border-color:rgba(185,125,242,.8);background-color:rgba(185,125,242,.05)}.icon-button--primary:focus,.icon-button--primary:hover{border-color:#b97df2;background-color:rgba(185,125,242,.3)}.icon-button--primary:active{background-color:rgba(185,125,242,.2)}.icon-button--secondary{border-color:rgba(23,214,232,.8);background-color:rgba(23,214,232,.05)}.icon-button--secondary:focus,.icon-button--secondary:hover{border-color:#17d6e8;background-color:rgba(23,214,232,.3)}.icon-button--secondary:active{background-color:rgba(23,214,232,.2)}.icon-button--tertiary{border-color:rgba(242,242,242,.8);background-color:rgba(242,242,242,.05)}.icon-button--tertiary:focus,.icon-button--tertiary:hover{border-color:#f2f2f2;background-color:rgba(242,242,242,.3)}.icon-button--tertiary:active{background-color:rgba(242,242,242,.2)}.icon-button--success{border-color:rgba(69,208,67,.8);background-color:rgba(69,208,67,.05)}.icon-button--success:focus,.icon-button--success:hover{border-color:#45d043;background-color:rgba(69,208,67,.3)}.icon-button--success:active{background-color:rgba(69,208,67,.2)}.icon-button--danger{border-color:rgba(248,96,57,.8);background-color:rgba(248,96,57,.05)}.icon-button--danger:focus,.icon-button--danger:hover{border-color:#f86039;background-color:rgba(248,96,57,.3)}.icon-button--danger:active{background-color:rgba(248,96,57,.2)}.icon-button--warning{border-color:rgba(233,205,53,.8);background-color:rgba(233,205,53,.05)}.icon-button--warning:focus,.icon-button--warning:hover{border-color:#e9cd35;background-color:rgba(233,205,53,.3)}.icon-button--warning:active{background-color:rgba(233,205,53,.2)}.launcher{display:block;position:relative;flex-direction:row;justify-content:space-between;width:100%;height:100%;background-color:#08070d}.launcher__vertical-split{display:flex;position:absolute;top:0;right:50%;bottom:0;left:0;flex-direction:column;align-items:flex-start;justify-content:space-between}.launcher__vertical-split--right{right:0;left:50%;align-items:flex-end}@keyframes slide-mm-bg-over{0%{transform:translateX(100dp)}100%{transform:translateX(0dp)}}.launcher__background-wrapper{display:flex;position:absolute;top:-55vw;right:-100%;bottom:-50vw;left:-70vw;align-items:center;justify-content:flex-start;transform:translateX(0dp);animation:25s cubic-out 1 slide-mm-bg-over}@keyframes fade-mm-in{0%{opacity:0}100%{opacity:.1}}.launcher__background-mm{position:absolute;top:0;bottom:0;left:0;width:auto;height:100%;animation:2.5s cubic-in-out 1 fade-mm-in;opacity:.1}.launcher__title-quadrant{flex:1 1 auto;width:auto;height:auto;padding-top:96dp;padding-left:96dp}.launcher__title-quadrant--right{padding-right:96dp;padding-left:0}.launcher__content-quadrant{display:flex;position:relative;flex:1 1 100%;flex-direction:column;align-items:flex-start;justify-content:flex-end;width:100%;height:auto;padding:32dp}.menu-list-item{color:#ccc;display:flex;flex-direction:row;align-items:center;width:100%;height:auto;padding:16dp;border-radius:8dp;background-color:rgba(0,0,0,0);cursor:pointer}.menu-list-item svg{image-color:#ccc}.menu-list-item--right{flex-direction:row-reverse;align-content:flex-end}.menu-list-item--right .menu-list-item__bullet{margin-left:12dp;opacity:1}.menu-list-item--right.menu-list-item:focus:not(:disabled,[disabled]),.menu-list-item--right.menu-list-item:hover:not(:disabled,[disabled]){decorator:horizontal-gradient(#7A2AC600 #DABAF714)}.menu-list-item:focus:not(:disabled,[disabled]),.menu-list-item:hover:not(:disabled,[disabled]){color:#b97df2;decorator:horizontal-gradient(#7A2AC614 #DABAF700)}.menu-list-item:focus:not(:disabled,[disabled]) svg,.menu-list-item:hover:not(:disabled,[disabled]) svg{image-color:#b97df2}.menu-list-item:focus:not(:disabled,[disabled]) .menu-list-item__bullet,.menu-list-item:hover:not(:disabled,[disabled]) .menu-list-item__bullet{opacity:1}.menu-list-item:disabled,.menu-list-item[disabled]{opacity:.5;tab-index:none;cursor:default}.menu-list-item__bullet{margin-right:12dp;opacity:0}.subtitle-title{display:block;position:relative;flex-direction:column;align-content:flex-start;align-items:flex-start;width:auto;height:auto;padding:0;background-color:rgba(0,0,0,0);color:#ccc;text-align:left;cursor:pointer}.subtitle-title--right{align-content:flex-end}.subtitle-title--right,.subtitle-title--right>*{text-align:right}.subtitle-title[selected]{color:#f2f2f2;cursor:default}.subtitle-title:focus:not(:disabled,[disabled]),.subtitle-title:hover:not(:disabled,[disabled],[selected]){color:#b97df2}.subtitle-title:disabled,.subtitle-title[disabled]{opacity:.5;cursor:default;tab-index:none}.subtitle-title h3{margin-bottom:6dp}.subtitle-title h1{margin-top:6dp}.subtitle-title__disclaimer{margin-top:16dp}.toggle{transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out;display:flex;position:relative;flex-direction:row;align-items:center;justify-content:space-between;width:162dp;height:72dp;border-radius:36dp;opacity:.9;background:rgba(0,0,0,0);cursor:pointer}.toggle:hover,.toggle:focus-visible,.toggle:focus{opacity:1;background-color:rgba(23,214,232,.3)}.toggle:active{opacity:1;background-color:rgba(23,214,232,.05)}.toggle .toggle__border{position:absolute;top:1.1dp;right:1.1dp;bottom:1.1dp;left:1.1dp;border-width:1.1dp;border-color:#a2eff6;display:block;border-radius:36dp}.toggle .toggle__floater{position:absolute;top:50%;left:4dp;width:80dp;height:64dp;transform:translateY(-50%);border-radius:32dp;background:#25a1ad}.toggle--checked .toggle__floater{left:78dp}.toggle--checked .toggle__icon.toggle__icon--left{opacity:.9;color:#a2eff6}.toggle--checked .toggle__icon.toggle__icon--right{opacity:1;color:#f2f2f2}.toggle__icons{display:flex;position:absolute;top:50%;right:16dp;left:16dp;align-items:center;justify-content:space-between;height:56dp;transform:translateY(-50%)}.toggle__icon{transition:color .05s linear-in-out,background-color .05s linear-in-out;display:flex;align-items:center;justify-content:center;width:56dp;height:56dp;color:#f2f2f2}.toggle__icon--right{opacity:1;color:#a2eff6}.bottom-left{display:flex;position:absolute;bottom:4dp;flex-direction:row;align-items:flex-start;justify-content:flex-start;width:100%;max-width:1692.4444444444dp;height:auto;margin:0 4dp}.prompt__overlay{background-color:rgba(190,184,219,.1);pointer-events:none}.prompt__overlay,.prompt__content-wrapper{position:absolute;top:0;right:0;bottom:0;left:0}.prompt__content-wrapper{display:flex;position:absolute;top:0;right:0;bottom:0;left:0;align-items:center;justify-content:center}.prompt__content{display:flex;position:relative;flex:1 1 100%;flex-direction:column;width:100%;max-width:700dp;height:auto;margin:auto;border-width:1.1dp;border-radius:16dp;border-color:rgba(255,255,255,.2);background:rgba(8,7,13,.9)}.prompt__content h3,.prompt__content p{margin:24dp}.prompt__content p{margin-top:0}.prompt__controls{display:flex;flex-direction:row;justify-content:center;padding:24dp 12dp;border-top-width:1.1dp;border-top-color:rgba(255,255,255,.1)}.prompt__controls .button{min-width:233.3333333333dp;margin:0 12dp;text-align:center;nav-up:none;nav-down:none}.config-debug{display:block;position:relative;width:100%;max-height:100%;padding:8dp}.config-debug__scroll{display:block;position:relative;width:100%;max-height:100%;overflow-y:auto}.config-debug-option{color:#ccc;transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out;border-bottom-width:1.1dp;border-bottom-color:rgba(255,255,255,.1);display:block;position:relative;flex-direction:column;width:100%;height:auto;padding:12dp 4dp;background-color:rgba(0,0,0,0)}.config-debug-option svg{image-color:#ccc}.config-debug-option svg{transition:image-color .05s linear-in-out,background-color .05s linear-in-out}.config-debug-option:focus:not(:disabled,[disabled]),.config-debug-option:focus-visible:not(:disabled,[disabled]),.config-debug-option:hover:not(:disabled,[disabled]){color:#f2f2f2;background-color:rgba(190,184,219,.1)}.config-debug-option:focus:not(:disabled,[disabled]) svg,.config-debug-option:focus-visible:not(:disabled,[disabled]) svg,.config-debug-option:hover:not(:disabled,[disabled]) svg{image-color:#f2f2f2}.config-debug-option:disabled,.config-debug-option[disabled]{opacity:.5}.config-debug-option .icon-button{margin-left:8dp}.config-debug__option-split{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.config-debug-option__label{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;padding:4dp 16dp 12dp;width:auto;height:auto;white-space:nowrap}.config-debug__option-controls{display:block;position:relative;flex:1 1 auto;height:auto;width:auto;max-width:800dp;padding:0 12dp}.config-debug__option-trigger{flex:1 1 auto}.config-debug__select-wrapper{display:flex;position:relative;flex-direction:row;align-items:center;justify-content:flex-start;flex:1 1 100%;width:auto;max-width:800dp;height:auto;padding:4dp}.config-debug__select-wrapper .config-debug__select-label{padding-right:16dp;flex:auto;width:196dp}.config-debug__select-wrapper .config-debug__select-label>div{display:inline;width:auto;height:auto}.config-debug__select-wrapper input{display:block;position:relative;box-sizing:border-box;padding:0;flex:1 1 100%;width:auto;height:20dp;margin:auto 0}.config-debug__select-wrapper select{transition:color .05s linear-in-out,background-color .05s linear-in-out,opacity .05s linear-in-out,border-color .05s linear-in-out;border-width:1.1dp;border-color:rgba(255,255,255,.5);display:block;position:relative;box-sizing:border-box;padding:0;flex:1 1 100%;width:auto;height:48dp;border-radius:12dp;background-color:rgba(255,255,255,.05);cursor:pointer;align-items:center;justify-content:flex-start;padding:14dp}.config-debug__select-wrapper select svg{transition:image-color .05s linear-in-out,background-color .05s linear-in-out}.config-debug__select-wrapper select:hover,.config-debug__select-wrapper select:focus{border-width:1.1dp;border-color:rgba(255,255,255,.8);background-color:rgba(255,255,255,.2)}.config-debug__select-wrapper select selectvalue{display:inline;margin:auto 0;height:auto}.config-debug__select-wrapper select selectbox{border-width:1.1dp;border-color:rgba(255,255,255,.8);background-color:#191622;padding:4dp 0;margin-top:2dp;border-radius:12dp}.config-debug__select-wrapper select selectbox option{transition:color .05s linear-in-out,background-color .05s linear-in-out;padding:8dp 12dp;background-color:rgba(0,0,0,0);color:#ccc;font-weight:400}.config-debug__select-wrapper select selectbox option:hover,.config-debug__select-wrapper select selectbox option:focus{background-color:rgba(255,255,255,.2)}.config-debug__select-wrapper select selectbox option:hover:not(:checked){cursor:pointer}.config-debug__select-wrapper select selectbox option:checked{color:#fff;background-color:rgba(255,255,255,.05)}body{box-sizing:border-box;color:#f2f2f2;font-family:chiaro}.rmlui-window{opacity:1}.rmlui-window--hidden{opacity:0}.rmlui-window:not([mouse-active]){pointer-events:none}*,*:before,*:after{box-sizing:border-box}button{background-color:#7a2ac6}@keyframes blue-pulse{0%{color:#17d6e8}50%{color:#a2eff6}100%{color:#17d6e8}}@keyframes blue-pulse-with-border{0%{border-color:#17d6e8;color:#17d6e8}50%{border-color:#a2eff6;color:#a2eff6}100%{border-color:#17d6e8;color:#17d6e8}}@keyframes blue-pulse-background{0%{background-color:#17d6e8}50%{background-color:#a2eff6}100%{background-color:#17d6e8}}
diff --git a/assets/scss/styles/components/Button.scss b/assets/scss/styles/components/Button.scss
index 68d2f0a..d5d1514 100644
--- a/assets/scss/styles/components/Button.scss
+++ b/assets/scss/styles/components/Button.scss
@@ -37,9 +37,9 @@
border-radius: $border-radius-md;
// Setting it by default for convenience
- // &--primary {
- // @include create-button-variation($color-primary);
- // }
+ &--primary {
+ @include create-button-variation($color-primary);
+ }
&--large {
@extend %label-lg;
diff --git a/assets/scss/styles/components/Config.scss b/assets/scss/styles/components/Config.scss
index 617f066..c62b7a9 100644
--- a/assets/scss/styles/components/Config.scss
+++ b/assets/scss/styles/components/Config.scss
@@ -1,8 +1,17 @@
-.config__exit-button {
+.config__icon-buttons {
+ display: flex;
position: absolute;
top: space(8);
- right: space(8);
+ right: space(0);
+ flex-direction: row;
+ align-items: center;
+ justify-content: flex-end;
+ width: auto;
+
+ .icon-button {
+ margin: 0 space(8);
+ }
}
.config__form {
diff --git a/include/recomp_ui.h b/include/recomp_ui.h
index 4600a2e..cae598f 100644
--- a/include/recomp_ui.h
+++ b/include/recomp_ui.h
@@ -54,6 +54,16 @@ namespace recomp {
Count
};
+ enum class ButtonVariant {
+ Primary,
+ Secondary,
+ Tertiary,
+ Success,
+ Error,
+ Warning,
+ NumVariants,
+ };
+
void set_config_submenu(ConfigSubmenu submenu);
void destroy_ui();
@@ -63,15 +73,21 @@ namespace recomp {
void update_supported_options();
void toggle_fullscreen();
+ extern const std::unordered_map
button_variants;
+
struct PromptContext {
Rml::DataModelHandle model_handle;
std::string header = "";
std::string content = "";
std::string confirmLabel = "Confirm";
std::string cancelLabel = "Cancel";
+ ButtonVariant confirmVariant = ButtonVariant::Success;
+ ButtonVariant cancelVariant = ButtonVariant::Error;
std::function onConfirm;
std::function onCancel;
+ std::string returnElementId = "";
+
bool open = false;
bool shouldFocus = false;
bool focusOnCancel = true;
@@ -86,7 +102,10 @@ namespace recomp {
const std::string& cancelLabelText,
std::function confirmCb,
std::function cancelCb,
- bool shouldFocusOnCancel = true
+ ButtonVariant _confirmVariant = ButtonVariant::Success,
+ ButtonVariant _cancelVariant = ButtonVariant::Error,
+ bool _focusOnCancel = true,
+ const std::string& _returnElementId = ""
);
void on_confirm(void);
void on_cancel(void);
diff --git a/src/ui/ui_config.cpp b/src/ui/ui_config.cpp
index 116433a..8104fbd 100644
--- a/src/ui/ui_config.cpp
+++ b/src/ui/ui_config.cpp
@@ -19,6 +19,15 @@ Rml::DataModelHandle sound_options_model_handle;
recomp::PromptContext prompt_context;
namespace recomp {
+ const std::unordered_map button_variants {
+ {ButtonVariant::Primary, "primary"},
+ {ButtonVariant::Secondary, "secondary"},
+ {ButtonVariant::Tertiary, "tertiary"},
+ {ButtonVariant::Success, "success"},
+ {ButtonVariant::Error, "error"},
+ {ButtonVariant::Warning, "warning"}
+ };
+
void PromptContext::close_prompt() {
open = false;
model_handle.DirtyVariable("prompt__open");
@@ -31,7 +40,10 @@ namespace recomp {
const std::string& cancelLabelText,
std::function confirmCb,
std::function cancelCb,
- bool shouldFocusOnCancel
+ ButtonVariant _confirmVariant,
+ ButtonVariant _cancelVariant,
+ bool _focusOnCancel,
+ const std::string& _returnElementId
) {
open = true;
header = headerText;
@@ -40,7 +52,10 @@ namespace recomp {
cancelLabel = cancelLabelText;
onConfirm = confirmCb;
onCancel = cancelCb;
- focusOnCancel = shouldFocusOnCancel;
+ confirmVariant = _confirmVariant;
+ cancelVariant = _cancelVariant;
+ focusOnCancel = _focusOnCancel;
+ returnElementId = _returnElementId;
model_handle.DirtyVariable("prompt__open");
model_handle.DirtyVariable("prompt__header");
@@ -201,7 +216,11 @@ void close_config_menu() {
new_options = ultramodern::get_graphics_config();
graphics_model_handle.DirtyAllVariables();
close_config_menu_impl();
- }
+ },
+ recomp::ButtonVariant::Success,
+ recomp::ButtonVariant::Error,
+ true,
+ "config__close-menu-button"
);
return;
}
@@ -209,6 +228,23 @@ void close_config_menu() {
close_config_menu_impl();
}
+void open_quit_game_prompt() {
+ prompt_context.open_prompt(
+ "Are you sure you want to quit?",
+ "Any progress since your last save will be lost.",
+ "Quit",
+ "Cancel",
+ []() {
+ ultramodern::quit();
+ },
+ []() {},
+ recomp::ButtonVariant::Error,
+ recomp::ButtonVariant::Tertiary,
+ true,
+ "config__quit-game-button"
+ );
+}
+
struct ControlOptionsContext {
int rumble_strength = 50; // 0 to 100
int gyro_sensitivity = 50; // 0 to 200
@@ -344,7 +380,7 @@ public:
});
recomp::register_event(listener, "config_keydown",
[](const std::string& param, Rml::Event& event) {
- if (event.GetId() == Rml::EventId::Keydown) {
+ if (!prompt_context.open && event.GetId() == Rml::EventId::Keydown) {
if (event.GetParameter("key_identifier", Rml::Input::KeyIdentifier::KI_UNKNOWN) == Rml::Input::KeyIdentifier::KI_ESCAPE) {
close_config_menu();
}
@@ -362,6 +398,11 @@ public:
close_config_menu();
});
+ recomp::register_event(listener, "open_quit_game_prompt",
+ [](const std::string& param, Rml::Event& event) {
+ open_quit_game_prompt();
+ });
+
recomp::register_event(listener, "toggle_input_device",
[](const std::string& param, Rml::Event& event) {
cur_device = cur_device == recomp::InputDevice::Controller
diff --git a/src/ui/ui_renderer.cpp b/src/ui/ui_renderer.cpp
index 18c13de..8ed0729 100644
--- a/src/ui/ui_renderer.cpp
+++ b/src/ui/ui_renderer.cpp
@@ -987,7 +987,36 @@ struct UIContext {
}
void update_prompt_loop(void) {
+ static bool wasShowingPrompt = false;
+
recomp::PromptContext *ctx = recomp::get_prompt_context();
+ if (!ctx->open && wasShowingPrompt) {
+ Rml::Element* focused = current_document->GetFocusLeafNode();
+ if (focused) focused->Blur();
+
+ bool didFocus = false;
+
+ if (ctx->returnElementId.size() > 0) {
+ Rml::Element *retEl = current_document->GetElementById(ctx->returnElementId);
+ if (retEl != nullptr && retEl->IsVisible()) {
+ retEl->Focus(true);
+ didFocus = true;
+ }
+ }
+
+ if (!didFocus) {
+ Rml::ElementList tabs;
+ current_document->GetElementsByTagName(tabs, "tab");
+ for (const auto& tab : tabs) {
+ if (tab->IsVisible()) {
+ tab->Focus(true);
+ break;
+ }
+ }
+ }
+ }
+ wasShowingPrompt = ctx->open;
+
if (!ctx->shouldFocus) return;
Rml::Element* focused = current_document->GetFocusLeafNode();
@@ -999,6 +1028,11 @@ struct UIContext {
targetButton->Focus(true);
ctx->shouldFocus = false;
+
+ Rml::Element *confirmButton = current_document->GetElementById("prompt__confirm-button");
+ Rml::Element *cancelButton = current_document->GetElementById("prompt__cancel-button");
+ if (confirmButton != nullptr) confirmButton->SetClassNames("button button--" + recomp::button_variants.at(ctx->confirmVariant));
+ if (cancelButton != nullptr) cancelButton->SetClassNames( "button button--" + recomp::button_variants.at(ctx->cancelVariant));
}
} rml;
};