diff --git a/dist/shoelace.css b/dist/shoelace.css
index 5a9ac9f30..18c6fdd3f 100644
--- a/dist/shoelace.css
+++ b/dist/shoelace.css
@@ -14,11 +14,13 @@
/*! Badges */.badge{font-size:.8em;color:#fff;background-color:#0074d9;border-radius:1em;padding:.2em .6em;vertical-align:baseline;display:inline-block;-webkit-transition:all .1s;transition:all .1s}.badge:empty{display:none}.badge.badge-secondary{color:#fff;background-color:#aaa}.badge.badge-success{color:#fff;background-color:#2ecc40}.badge.badge-info{color:#fff;background-color:#39cccc}.badge.badge-warning{color:#fff;background-color:#ff851b}.badge.badge-danger{color:#fff;background-color:#ff4136}.badge.badge-light{color:#111;background-color:#fff}.badge.badge-dark{color:#fff;background-color:#111}a.badge:hover{color:#fff;background-color:#0068c3;text-decoration:none}a.badge:focus{outline:none;-webkit-box-shadow:0 0 0 2px rgba(0,116,217,.5);box-shadow:0 0 0 2px rgba(0,116,217,.5)}a.badge.badge-secondary:hover{color:#fff;background-color:#999}a.badge.badge-secondary:focus{-webkit-box-shadow:0 0 0 2px hsla(0,0%,67%,.5);box-shadow:0 0 0 2px hsla(0,0%,67%,.5)}a.badge.badge-success:hover{color:#fff;background-color:#29b83a}a.badge.badge-success:focus{-webkit-box-shadow:0 0 0 2px rgba(46,204,64,.5);box-shadow:0 0 0 2px rgba(46,204,64,.5)}a.badge.badge-info:hover{color:#fff;background-color:#33b8b8}a.badge.badge-info:focus{-webkit-box-shadow:0 0 0 2px rgba(57,204,204,.5);box-shadow:0 0 0 2px rgba(57,204,204,.5)}a.badge.badge-warning:hover{color:#fff;background-color:#e67818}a.badge.badge-warning:focus{-webkit-box-shadow:0 0 0 2px rgba(255,133,27,.5);box-shadow:0 0 0 2px rgba(255,133,27,.5)}a.badge.badge-danger:hover{color:#fff;background-color:#e63b31}a.badge.badge-danger:focus{-webkit-box-shadow:0 0 0 2px rgba(255,65,54,.5);box-shadow:0 0 0 2px rgba(255,65,54,.5)}a.badge.badge-light:hover{color:#111;background-color:#e6e6e6}a.badge.badge-light:focus{-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.5);box-shadow:0 0 0 2px hsla(0,0%,100%,.5)}a.badge.badge-dark:hover{color:#fff;background-color:#292929}a.badge.badge-dark:focus{-webkit-box-shadow:0 0 0 2px hsla(0,0%,7%,.5);box-shadow:0 0 0 2px hsla(0,0%,7%,.5)}
-/*! Buttons */.button,button{font-family:inherit;font-size:1rem;font-weight:inherit;text-align:center;text-decoration:none;color:#fff;background-color:#0074d9;border-radius:.25rem;border:1px solid #0074d9;border-top-color:#1982dd;border-bottom-color:#0068c3;height:2.25rem;line-height:calc(2.25rem - 2px);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap;padding:0 .75em;cursor:pointer;display:inline-block;-webkit-transition:all .1s;transition:all .1s}.button:hover,button:hover{color:#fff}.button:hover:not(:disabled):not(.disabled),button:hover:not(:disabled):not(.disabled){text-decoration:none;background-color:#0068c3;border-color:#0068c3;border-top-color:#0074d9;border-bottom-color:#005dae}.button.active:not(:disabled):not(.disabled),.button:active:not(:disabled):not(.disabled),button.active:not(:disabled):not(.disabled),button:active:not(:disabled):not(.disabled){background-color:#0068c3;border-color:#0068c3;border-top-color:#005dae;border-bottom-color:#0068c3}.button:focus:not(:disabled):not(.disabled),button:focus:not(:disabled):not(.disabled){outline:none;-webkit-box-shadow:0 0 0 2px rgba(0,116,217,.5);box-shadow:0 0 0 2px rgba(0,116,217,.5)}.button.disabled,.button:disabled,button.disabled,button:disabled{text-decoration:none;opacity:.5;cursor:not-allowed}.button.button-xs,button.button-xs{font-size:.7rem;height:1.25rem;line-height:calc(1.25rem - 2px)}.button.button-sm,button.button-sm{font-size:.8rem;height:1.75rem;line-height:calc(1.75rem - 2px)}.button.button-lg,button.button-lg{font-size:1.25rem;height:2.75rem;line-height:calc(2.75rem - 2px)}.button.button-xl,button.button-xl{font-size:1.5rem;height:3.25rem;line-height:calc(3.25rem - 2px)}.button.button-secondary,button.button-secondary{color:#fff;background-color:#aaa;border-color:#aaa;border-top-color:#b3b3b3;border-bottom-color:#999}.button.button-secondary:hover:not(:disabled):not(.disabled),button.button-secondary:hover:not(:disabled):not(.disabled){color:#fff;background-color:#999;border-color:#999;border-top-color:#aaa;border-bottom-color:#888}.button.button-secondary.active:not(:disabled):not(.disabled),.button.button-secondary:active:not(:disabled):not(.disabled),button.button-secondary.active:not(:disabled):not(.disabled),button.button-secondary:active:not(:disabled):not(.disabled){background-color:#999;border-color:#999;border-top-color:#888;border-bottom-color:#999}.button.button-secondary:focus:not(:disabled):not(.disabled),button.button-secondary:focus:not(:disabled):not(.disabled){outline:none;-webkit-box-shadow:0 0 0 2px hsla(0,0%,67%,.5);box-shadow:0 0 0 2px hsla(0,0%,67%,.5)}.button.button-success,button.button-success{color:#fff;background-color:#2ecc40;border-color:#2ecc40;border-top-color:#43d153;border-bottom-color:#29b83a}.button.button-success:hover:not(:disabled):not(.disabled),button.button-success:hover:not(:disabled):not(.disabled){color:#fff;background-color:#29b83a;border-color:#29b83a;border-top-color:#2ecc40;border-bottom-color:#25a333}.button.button-success.active:not(:disabled):not(.disabled),.button.button-success:active:not(:disabled):not(.disabled),button.button-success.active:not(:disabled):not(.disabled),button.button-success:active:not(:disabled):not(.disabled){background-color:#29b83a;border-color:#29b83a;border-top-color:#25a333;border-bottom-color:#29b83a}.button.button-success:focus:not(:disabled):not(.disabled),button.button-success:focus:not(:disabled):not(.disabled){outline:none;-webkit-box-shadow:0 0 0 2px rgba(46,204,64,.5);box-shadow:0 0 0 2px rgba(46,204,64,.5)}.button.button-info,button.button-info{color:#fff;background-color:#39cccc;border-color:#39cccc;border-top-color:#4dd1d1;border-bottom-color:#33b8b8}.button.button-info:hover:not(:disabled):not(.disabled),button.button-info:hover:not(:disabled):not(.disabled){color:#fff;background-color:#33b8b8;border-color:#33b8b8;border-top-color:#39cccc;border-bottom-color:#2ea3a3}.button.button-info.active:not(:disabled):not(.disabled),.button.button-info:active:not(:disabled):not(.disabled),button.button-info.active:not(:disabled):not(.disabled),button.button-info:active:not(:disabled):not(.disabled){background-color:#33b8b8;border-color:#33b8b8;border-top-color:#2ea3a3;border-bottom-color:#33b8b8}.button.button-info:focus:not(:disabled):not(.disabled),button.button-info:focus:not(:disabled):not(.disabled){outline:none;-webkit-box-shadow:0 0 0 2px rgba(57,204,204,.5);box-shadow:0 0 0 2px rgba(57,204,204,.5)}.button.button-warning,button.button-warning{color:#fff;background-color:#ff851b;border-color:#ff851b;border-top-color:#ff9132;border-bottom-color:#e67818}.button.button-warning:hover:not(:disabled):not(.disabled),button.button-warning:hover:not(:disabled):not(.disabled){color:#fff;background-color:#e67818;border-color:#e67818;border-top-color:#ff851b;border-bottom-color:#cc6a16}.button.button-warning.active:not(:disabled):not(.disabled),.button.button-warning:active:not(:disabled):not(.disabled),button.button-warning.active:not(:disabled):not(.disabled),button.button-warning:active:not(:disabled):not(.disabled){background-color:#e67818;border-color:#e67818;border-top-color:#cc6a16;border-bottom-color:#e67818}.button.button-warning:focus:not(:disabled):not(.disabled),button.button-warning:focus:not(:disabled):not(.disabled){outline:none;-webkit-box-shadow:0 0 0 2px rgba(255,133,27,.5);box-shadow:0 0 0 2px rgba(255,133,27,.5)}.button.button-danger,button.button-danger{color:#fff;background-color:#ff4136;border-color:#ff4136;border-top-color:#ff544a;border-bottom-color:#e63b31}.button.button-danger:hover:not(:disabled):not(.disabled),button.button-danger:hover:not(:disabled):not(.disabled){color:#fff;background-color:#e63b31;border-color:#e63b31;border-top-color:#ff4136;border-bottom-color:#cc342b}.button.button-danger.active:not(:disabled):not(.disabled),.button.button-danger:active:not(:disabled):not(.disabled),button.button-danger.active:not(:disabled):not(.disabled),button.button-danger:active:not(:disabled):not(.disabled){background-color:#e63b31;border-color:#e63b31;border-top-color:#cc342b;border-bottom-color:#e63b31}.button.button-danger:focus:not(:disabled):not(.disabled),button.button-danger:focus:not(:disabled):not(.disabled){outline:none;-webkit-box-shadow:0 0 0 2px rgba(255,65,54,.5);box-shadow:0 0 0 2px rgba(255,65,54,.5)}.button.button-light,button.button-light{color:#111;background-color:#e6e6e6;border-color:#e6e6e6;border-top-color:#e9e9e9;border-bottom-color:#cfcfcf}.button.button-light:hover:not(:disabled):not(.disabled),button.button-light:hover:not(:disabled):not(.disabled){color:#111;background-color:#cfcfcf;border-color:#cfcfcf;border-top-color:#e6e6e6;border-bottom-color:#b8b8b8}.button.button-light.active:not(:disabled):not(.disabled),.button.button-light:active:not(:disabled):not(.disabled),button.button-light.active:not(:disabled):not(.disabled),button.button-light:active:not(:disabled):not(.disabled){background-color:#cfcfcf;border-color:#cfcfcf;border-top-color:#b8b8b8;border-bottom-color:#cfcfcf}.button.button-light:focus:not(:disabled):not(.disabled),button.button-light:focus:not(:disabled):not(.disabled){outline:none;-webkit-box-shadow:0 0 0 2px hsla(0,0%,90%,.5);box-shadow:0 0 0 2px hsla(0,0%,90%,.5)}.button.button-dark,button.button-dark{color:#fff;background-color:#292929;border-color:#292929;border-top-color:#3e3e3e;border-bottom-color:#252525}.button.button-dark:hover:not(:disabled):not(.disabled),button.button-dark:hover:not(:disabled):not(.disabled){color:#fff;background-color:#252525;border-color:#252525;border-top-color:#292929;border-bottom-color:#212121}.button.button-dark.active:not(:disabled):not(.disabled),.button.button-dark:active:not(:disabled):not(.disabled),button.button-dark.active:not(:disabled):not(.disabled),button.button-dark:active:not(:disabled):not(.disabled){background-color:#252525;border-color:#252525;border-top-color:#212121;border-bottom-color:#252525}.button.button-dark:focus:not(:disabled):not(.disabled),button.button-dark:focus:not(:disabled):not(.disabled){outline:none;-webkit-box-shadow:0 0 0 2px rgba(41,41,41,.5);box-shadow:0 0 0 2px rgba(41,41,41,.5)}.button.button-block,button.button-block{width:100%!important;display:block}.button.button-link,button.button-link{border-color:transparent;background-color:transparent;color:#0074d9;text-decoration:none;-webkit-box-shadow:none;box-shadow:none}.button.button-link:focus:not(:disabled):not(.disabled),.button.button-link:hover:not(:disabled):not(.disabled),button.button-link:focus:not(:disabled):not(.disabled),button.button-link:hover:not(:disabled):not(.disabled){border-color:transparent;background-color:transparent;color:#0074d9;text-decoration:underline;-webkit-box-shadow:none;box-shadow:none}label.button input[type=file]{display:none}.button-loader,.button-loader:hover{position:relative;min-width:2em;color:transparent!important;overflow:hidden}.button-loader:after{content:"";position:absolute;top:calc(50% - .5em);left:calc(50% - .5em);width:1em;height:1em;border-radius:50%;border:.15em solid hsla(0,0%,100%,.2);border-top-color:#fff;border-left-color:#fff;display:inline-block;-webkit-animation:button-loader .75s linear infinite;animation:button-loader .75s linear infinite}.button-danger.button-loader:after,.button-info.button-loader:after,.button-secondary.button-loader:after,.button-success.button-loader:after,.button-warning.button-loader:after{border-color:hsla(0,0%,100%,.2);border-top-color:#fff;border-left-color:#fff}.button-light.button-loader:after{border-color:hsla(0,0%,7%,.2);border-top-color:#111;border-left-color:#111}.button-dark.button-loader:after{border-color:hsla(0,0%,100%,.2);border-top-color:#fff;border-left-color:#fff}@-webkit-keyframes button-loader{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes button-loader{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}
+/*! Buttons */.button,button{font-family:inherit;font-size:1rem;font-weight:inherit;text-align:center;text-decoration:none;color:#fff;background-color:#0074d9;border-radius:.25rem;border:1px solid #0074d9;border-top-color:#1982dd;border-bottom-color:#0068c3;height:2.25rem;line-height:calc(2.25rem - 2px);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap;padding:0 .75em;cursor:pointer;display:inline-block;-webkit-transition:all .1s;transition:all .1s}.button:hover,button:hover{color:#fff}.button:hover:not(:disabled):not(.disabled),button:hover:not(:disabled):not(.disabled){text-decoration:none;background-color:#0068c3;border-color:#0068c3;border-top-color:#0074d9;border-bottom-color:#005dae}.button.active:not(:disabled):not(.disabled),.button:active:not(:disabled):not(.disabled),button.active:not(:disabled):not(.disabled),button:active:not(:disabled):not(.disabled){background-color:#0068c3;border-color:#0068c3;border-top-color:#005dae;border-bottom-color:#0068c3}.button:focus:not(:disabled):not(.disabled),button:focus:not(:disabled):not(.disabled){outline:none;-webkit-box-shadow:0 0 0 2px rgba(0,116,217,.5);box-shadow:0 0 0 2px rgba(0,116,217,.5)}.button.disabled,.button:disabled,button.disabled,button:disabled{text-decoration:none;opacity:.5;cursor:not-allowed}.button.button-xs,button.button-xs{font-size:.7rem;height:1.25rem;line-height:calc(1.25rem - 2px)}.button.button-sm,button.button-sm{font-size:.8rem;height:1.75rem;line-height:calc(1.75rem - 2px)}.button.button-lg,button.button-lg{font-size:1.25rem;height:2.75rem;line-height:calc(2.75rem - 2px)}.button.button-xl,button.button-xl{font-size:1.5rem;height:3.25rem;line-height:calc(3.25rem - 2px)}.button.button-secondary,button.button-secondary{color:#fff;background-color:#aaa;border-color:#aaa;border-top-color:#b3b3b3;border-bottom-color:#999}.button.button-secondary:hover:not(:disabled):not(.disabled),button.button-secondary:hover:not(:disabled):not(.disabled){color:#fff;background-color:#999;border-color:#999;border-top-color:#aaa;border-bottom-color:#888}.button.button-secondary.active:not(:disabled):not(.disabled),.button.button-secondary:active:not(:disabled):not(.disabled),button.button-secondary.active:not(:disabled):not(.disabled),button.button-secondary:active:not(:disabled):not(.disabled){background-color:#999;border-color:#999;border-top-color:#888;border-bottom-color:#999}.button.button-secondary:focus:not(:disabled):not(.disabled),button.button-secondary:focus:not(:disabled):not(.disabled){outline:none;-webkit-box-shadow:0 0 0 2px hsla(0,0%,67%,.5);box-shadow:0 0 0 2px hsla(0,0%,67%,.5)}.button.button-success,button.button-success{color:#fff;background-color:#2ecc40;border-color:#2ecc40;border-top-color:#43d153;border-bottom-color:#29b83a}.button.button-success:hover:not(:disabled):not(.disabled),button.button-success:hover:not(:disabled):not(.disabled){color:#fff;background-color:#29b83a;border-color:#29b83a;border-top-color:#2ecc40;border-bottom-color:#25a333}.button.button-success.active:not(:disabled):not(.disabled),.button.button-success:active:not(:disabled):not(.disabled),button.button-success.active:not(:disabled):not(.disabled),button.button-success:active:not(:disabled):not(.disabled){background-color:#29b83a;border-color:#29b83a;border-top-color:#25a333;border-bottom-color:#29b83a}.button.button-success:focus:not(:disabled):not(.disabled),button.button-success:focus:not(:disabled):not(.disabled){outline:none;-webkit-box-shadow:0 0 0 2px rgba(46,204,64,.5);box-shadow:0 0 0 2px rgba(46,204,64,.5)}.button.button-info,button.button-info{color:#fff;background-color:#39cccc;border-color:#39cccc;border-top-color:#4dd1d1;border-bottom-color:#33b8b8}.button.button-info:hover:not(:disabled):not(.disabled),button.button-info:hover:not(:disabled):not(.disabled){color:#fff;background-color:#33b8b8;border-color:#33b8b8;border-top-color:#39cccc;border-bottom-color:#2ea3a3}.button.button-info.active:not(:disabled):not(.disabled),.button.button-info:active:not(:disabled):not(.disabled),button.button-info.active:not(:disabled):not(.disabled),button.button-info:active:not(:disabled):not(.disabled){background-color:#33b8b8;border-color:#33b8b8;border-top-color:#2ea3a3;border-bottom-color:#33b8b8}.button.button-info:focus:not(:disabled):not(.disabled),button.button-info:focus:not(:disabled):not(.disabled){outline:none;-webkit-box-shadow:0 0 0 2px rgba(57,204,204,.5);box-shadow:0 0 0 2px rgba(57,204,204,.5)}.button.button-warning,button.button-warning{color:#fff;background-color:#ff851b;border-color:#ff851b;border-top-color:#ff9132;border-bottom-color:#e67818}.button.button-warning:hover:not(:disabled):not(.disabled),button.button-warning:hover:not(:disabled):not(.disabled){color:#fff;background-color:#e67818;border-color:#e67818;border-top-color:#ff851b;border-bottom-color:#cc6a16}.button.button-warning.active:not(:disabled):not(.disabled),.button.button-warning:active:not(:disabled):not(.disabled),button.button-warning.active:not(:disabled):not(.disabled),button.button-warning:active:not(:disabled):not(.disabled){background-color:#e67818;border-color:#e67818;border-top-color:#cc6a16;border-bottom-color:#e67818}.button.button-warning:focus:not(:disabled):not(.disabled),button.button-warning:focus:not(:disabled):not(.disabled){outline:none;-webkit-box-shadow:0 0 0 2px rgba(255,133,27,.5);box-shadow:0 0 0 2px rgba(255,133,27,.5)}.button.button-danger,button.button-danger{color:#fff;background-color:#ff4136;border-color:#ff4136;border-top-color:#ff544a;border-bottom-color:#e63b31}.button.button-danger:hover:not(:disabled):not(.disabled),button.button-danger:hover:not(:disabled):not(.disabled){color:#fff;background-color:#e63b31;border-color:#e63b31;border-top-color:#ff4136;border-bottom-color:#cc342b}.button.button-danger.active:not(:disabled):not(.disabled),.button.button-danger:active:not(:disabled):not(.disabled),button.button-danger.active:not(:disabled):not(.disabled),button.button-danger:active:not(:disabled):not(.disabled){background-color:#e63b31;border-color:#e63b31;border-top-color:#cc342b;border-bottom-color:#e63b31}.button.button-danger:focus:not(:disabled):not(.disabled),button.button-danger:focus:not(:disabled):not(.disabled){outline:none;-webkit-box-shadow:0 0 0 2px rgba(255,65,54,.5);box-shadow:0 0 0 2px rgba(255,65,54,.5)}.button.button-light,button.button-light{color:#111;background-color:#e6e6e6;border-color:#e6e6e6;border-top-color:#e9e9e9;border-bottom-color:#cfcfcf}.button.button-light:hover:not(:disabled):not(.disabled),button.button-light:hover:not(:disabled):not(.disabled){color:#111;background-color:#cfcfcf;border-color:#cfcfcf;border-top-color:#e6e6e6;border-bottom-color:#b8b8b8}.button.button-light.active:not(:disabled):not(.disabled),.button.button-light:active:not(:disabled):not(.disabled),button.button-light.active:not(:disabled):not(.disabled),button.button-light:active:not(:disabled):not(.disabled){background-color:#cfcfcf;border-color:#cfcfcf;border-top-color:#b8b8b8;border-bottom-color:#cfcfcf}.button.button-light:focus:not(:disabled):not(.disabled),button.button-light:focus:not(:disabled):not(.disabled){outline:none;-webkit-box-shadow:0 0 0 2px hsla(0,0%,90%,.5);box-shadow:0 0 0 2px hsla(0,0%,90%,.5)}.button.button-dark,button.button-dark{color:#fff;background-color:#292929;border-color:#292929;border-top-color:#3e3e3e;border-bottom-color:#252525}.button.button-dark:hover:not(:disabled):not(.disabled),button.button-dark:hover:not(:disabled):not(.disabled){color:#fff;background-color:#252525;border-color:#252525;border-top-color:#292929;border-bottom-color:#212121}.button.button-dark.active:not(:disabled):not(.disabled),.button.button-dark:active:not(:disabled):not(.disabled),button.button-dark.active:not(:disabled):not(.disabled),button.button-dark:active:not(:disabled):not(.disabled){background-color:#252525;border-color:#252525;border-top-color:#212121;border-bottom-color:#252525}.button.button-dark:focus:not(:disabled):not(.disabled),button.button-dark:focus:not(:disabled):not(.disabled){outline:none;-webkit-box-shadow:0 0 0 2px rgba(41,41,41,.5);box-shadow:0 0 0 2px rgba(41,41,41,.5)}.button.button-block,button.button-block{width:100%!important;display:block}.button.button-link,button.button-link{border-color:transparent;background-color:transparent;color:#0074d9;text-decoration:none;-webkit-box-shadow:none;box-shadow:none}.button.button-link:focus:not(:disabled):not(.disabled),.button.button-link:hover:not(:disabled):not(.disabled),button.button-link:focus:not(:disabled):not(.disabled),button.button-link:hover:not(:disabled):not(.disabled){border-color:transparent;background-color:transparent;color:#0074d9;text-decoration:underline;-webkit-box-shadow:none;box-shadow:none}.button-loader,.button-loader:hover{position:relative;min-width:2em;color:transparent!important;overflow:hidden}.button-loader:after{content:"";position:absolute;top:calc(50% - .5em);left:calc(50% - .5em);width:1em;height:1em;border-radius:50%;border:.15em solid hsla(0,0%,100%,.2);border-top-color:#fff;border-left-color:#fff;display:inline-block;-webkit-animation:button-loader .75s linear infinite;animation:button-loader .75s linear infinite}.button-danger.button-loader:after,.button-info.button-loader:after,.button-secondary.button-loader:after,.button-success.button-loader:after,.button-warning.button-loader:after{border-color:hsla(0,0%,100%,.2);border-top-color:#fff;border-left-color:#fff}.button-light.button-loader:after{border-color:hsla(0,0%,7%,.2);border-top-color:#111;border-left-color:#111}.button-dark.button-loader:after{border-color:hsla(0,0%,100%,.2);border-top-color:#fff;border-left-color:#fff}@-webkit-keyframes button-loader{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes button-loader{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}
/*! Dropdowns */.dropdown{position:relative;display:inline-block}.dropdown .dropdown-trigger:after{content:"▼";font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue;font-size:.6em;vertical-align:middle;margin-left:.5em;display:inline-block;-webkit-transform:scaleY(.75);transform:scaleY(.75);margin-top:-.2em}.dropdown.dropdown-top .dropdown-trigger:after{-webkit-transform:scaleY(.75) rotate(180deg);transform:scaleY(.75) rotate(180deg)}.dropdown .dropdown-menu{position:absolute;top:calc(100% + 1px);left:0;z-index:100;min-width:10rem;max-width:25rem;max-height:none;background-color:#fff;border:1px solid #ddd;border-radius:.25rem;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.05);box-shadow:0 1px 0 rgba(0,0,0,.05);display:none;padding:.25rem 0;overflow-y:auto;-webkit-transform:translateZ(0);transform:translateZ(0)}.dropdown .dropdown-menu a{position:relative;color:#111;text-decoration:none;padding:.25rem calc(1rem + .5em);display:block;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}.dropdown .dropdown-menu a:focus:not(.disabled){outline:none;color:#111;background-color:#f2f2f2}.dropdown .dropdown-menu a:hover:not(.disabled){color:#fff;background-color:#0074d9}.dropdown .dropdown-menu a.disabled{outline:none;cursor:not-allowed;opacity:.5}.dropdown .dropdown-menu a.checked:before{position:absolute;left:calc(.5rem - .1em);content:"✓";font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue;font-weight:600}.dropdown .dropdown-menu hr{width:100%;border-top:1px solid #ddd;margin:.25rem 0}.dropdown.dropdown-top .dropdown-menu{top:auto;bottom:calc(100% + 1px)}.dropdown.dropdown-left .dropdown-menu{left:auto;right:0}.dropdown.dropdown.active .dropdown-menu{display:block}
-/*! Forms */fieldset{border:1px solid #ddd;border-radius:.25rem;padding:1.5rem 2rem;margin-bottom:1.5rem}fieldset legend{font-weight:700;padding:0 .25rem}fieldset>:last-child{margin-bottom:0}label{color:inherit;display:inline-block;margin-bottom:.25rem}label+label{margin-left:1rem}input[type=color],input[type=date],input[type=datetime-local],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{width:100%;font-family:inherit;font-size:1rem;font-weight:inherit;color:#111;border:1px solid #ddd;border-radius:.25rem;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);background-color:#fff;height:2.25rem;line-height:2.25rem;vertical-align:middle;display:block;padding-left:.5rem;padding-right:.5rem;margin:0;-webkit-transition:border-color .1s,background-color .1s,color .1s;transition:border-color .1s,background-color .1s,color .1s;white-space:nowrap;-moz-appearance:none;-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{outline:none;border-color:#0074d9}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled],select[disabled],textarea[disabled]{opacity:.5;cursor:not-allowed}input[type=color][readonly],input[type=date][readonly],input[type=datetime-local][readonly],input[type=email][readonly],input[type=month][readonly],input[type=number][readonly],input[type=password][readonly],input[type=search][readonly],input[type=tel][readonly],input[type=text][readonly],input[type=time][readonly],input[type=url][readonly],input[type=week][readonly],select[readonly],textarea[readonly]{background-color:#f2f2f2}input[type=color][type=color],input[type=date][type=color],input[type=datetime-local][type=color],input[type=email][type=color],input[type=month][type=color],input[type=number][type=color],input[type=password][type=color],input[type=search][type=color],input[type=tel][type=color],input[type=text][type=color],input[type=time][type=color],input[type=url][type=color],input[type=week][type=color],select[type=color],textarea[type=color]{padding:.5rem}input[type=color][type=color]::-webkit-color-swatch-wrapper,input[type=date][type=color]::-webkit-color-swatch-wrapper,input[type=datetime-local][type=color]::-webkit-color-swatch-wrapper,input[type=email][type=color]::-webkit-color-swatch-wrapper,input[type=month][type=color]::-webkit-color-swatch-wrapper,input[type=number][type=color]::-webkit-color-swatch-wrapper,input[type=password][type=color]::-webkit-color-swatch-wrapper,input[type=search][type=color]::-webkit-color-swatch-wrapper,input[type=tel][type=color]::-webkit-color-swatch-wrapper,input[type=text][type=color]::-webkit-color-swatch-wrapper,input[type=time][type=color]::-webkit-color-swatch-wrapper,input[type=url][type=color]::-webkit-color-swatch-wrapper,input[type=week][type=color]::-webkit-color-swatch-wrapper,select[type=color]::-webkit-color-swatch-wrapper,textarea[type=color]::-webkit-color-swatch-wrapper{padding:0}input[type=color][type=color]::-webkit-color-swatch,input[type=date][type=color]::-webkit-color-swatch,input[type=datetime-local][type=color]::-webkit-color-swatch,input[type=email][type=color]::-webkit-color-swatch,input[type=month][type=color]::-webkit-color-swatch,input[type=number][type=color]::-webkit-color-swatch,input[type=password][type=color]::-webkit-color-swatch,input[type=search][type=color]::-webkit-color-swatch,input[type=tel][type=color]::-webkit-color-swatch,input[type=text][type=color]::-webkit-color-swatch,input[type=time][type=color]::-webkit-color-swatch,input[type=url][type=color]::-webkit-color-swatch,input[type=week][type=color]::-webkit-color-swatch,select[type=color]::-webkit-color-swatch,textarea[type=color]::-webkit-color-swatch{border:none;border-radius:.25rem}input[type=color].input-xs,input[type=date].input-xs,input[type=datetime-local].input-xs,input[type=email].input-xs,input[type=month].input-xs,input[type=number].input-xs,input[type=password].input-xs,input[type=search].input-xs,input[type=tel].input-xs,input[type=text].input-xs,input[type=time].input-xs,input[type=url].input-xs,input[type=week].input-xs,select.input-xs,textarea.input-xs{font-size:.7rem;height:1.25rem;line-height:1.25rem}input[type=color].input-sm,input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=email].input-sm,input[type=month].input-sm,input[type=number].input-sm,input[type=password].input-sm,input[type=search].input-sm,input[type=tel].input-sm,input[type=text].input-sm,input[type=time].input-sm,input[type=url].input-sm,input[type=week].input-sm,select.input-sm,textarea.input-sm{font-size:.8rem;height:1.75rem;line-height:1.75rem}input[type=color].input-lg,input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=email].input-lg,input[type=month].input-lg,input[type=number].input-lg,input[type=password].input-lg,input[type=search].input-lg,input[type=tel].input-lg,input[type=text].input-lg,input[type=time].input-lg,input[type=url].input-lg,input[type=week].input-lg,select.input-lg,textarea.input-lg{font-size:1.25rem;height:2.75rem;line-height:2.75rem}input[type=color].input-xl,input[type=date].input-xl,input[type=datetime-local].input-xl,input[type=email].input-xl,input[type=month].input-xl,input[type=number].input-xl,input[type=password].input-xl,input[type=search].input-xl,input[type=tel].input-xl,input[type=text].input-xl,input[type=time].input-xl,input[type=url].input-xl,input[type=week].input-xl,select.input-xl,textarea.input-xl{font-size:1.5rem;height:3.25rem;line-height:3.25rem}input[type=checkbox],input[type=radio]{vertical-align:1px}select{position:relative;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='41' height='26' viewBox='0 0 41 26' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23000' d='M0 5.382l19.983 19.983L40.14 5.208 34.932 0 19.869 15.062 4.84.032z' fill-rule='evenodd'/%3E%3C/svg%3E");background-position:right .4rem center;background-repeat:no-repeat;background-size:.75rem;padding-top:0;padding-bottom:0;padding-right:1.5rem}textarea,textarea.input-lg,textarea.input-sm,textarea.input-xl,textarea.input-xs{height:auto;resize:vertical;line-height:1.5;white-space:normal}input[type=range]{-webkit-appearance:none;width:100%;height:2.25rem;line-height:2.25rem;vertical-align:middle}input[type=range]:focus{outline:none}input[type=range]::-webkit-slider-runnable-track{width:100%;height:.5rem;cursor:pointer;background:#f2f2f2;border-radius:.25rem;border:none;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}input[type=range]::-webkit-slider-thumb{border:none;width:1.25rem;height:1.25rem;border-radius:50%;background:#0074d9;cursor:pointer;-webkit-appearance:none;margin-top:-.375rem}input[type=range]:focus::-webkit-slider-runnable-track{background:#f2f2f2}input[type=range]:focus::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 2px rgba(0,116,217,.5);box-shadow:0 0 0 2px rgba(0,116,217,.5)}input[type=range]::-moz-range-track{width:100%;height:.5rem;cursor:pointer;background:#f2f2f2;border-radius:.25rem;border:none;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}input[type=range]::-moz-range-thumb{border:none;height:1.25rem;width:1.25rem;border-radius:50%;background:#0074d9;cursor:pointer}input[type=range]:focus::-moz-range-thumb{box-shadow:0 0 0 2px rgba(0,116,217,.5)}input[type=range]::-ms-track{width:100%;height:.5rem;cursor:pointer;background:transparent;border-color:transparent;color:transparent}input[type=range]::-ms-fill-lower,input[type=range]::-ms-fill-upper{background:#f2f2f2;border:none;border-radius:.25rem}input[type=range]::-ms-thumb{border:none;height:1.25rem;width:1.25rem;border-radius:50%;background:#0074d9;cursor:pointer;margin-top:-.25rem}input[type=range]:focus::-ms-thumb{box-shadow:0 0 0 2px rgba(0,116,217,.5)}input[type=range]:focus::-ms-fill-lower,input[type=range]:focus::-ms-fill-upper{background:#f2f2f2}.input-field,.input-group{margin-bottom:1.5rem}.input-group{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.input-group>.button,.input-group>.dropdown .button,.input-group>.dropdown button,.input-group>.input-icon input,.input-group>.input-icon select,.input-group>button,.input-group>input{border-radius:0}.input-group>.button:first-child,.input-group>.dropdown:first-child .button,.input-group>.dropdown:first-child button,.input-group>.input-icon:first-child input,.input-group>.input-icon:first-child select,.input-group>button:first-child,.input-group>input:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.input-group>.button:last-child,.input-group>.dropdown:last-child .button,.input-group>.dropdown:last-child button,.input-group>.input-icon:last-child input,.input-group>.input-icon:last-child select,.input-group>button:last-child,.input-group>input:last-child{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.input-group>input+input{border-left-width:0}.input-group>input+input:focus{border-left-width:1px;margin-left:-1px}.input-group .button:focus,.input-group button:focus{-webkit-transform:translateZ(0);transform:translateZ(0)}.input-addon{font-size:1rem;height:2.25rem;line-height:2.25rem;border-top:1px solid #ddd;border-bottom:1px solid #ddd;background:#f2f2f2;color:#aaa;padding:0 .5rem;white-space:nowrap}.input-addon:first-child{border-left:1px solid #ddd;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.input-addon:last-child{border-right:1px solid #ddd;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.input-addon.input-addon-xs{font-size:.7rem;height:1.25rem;line-height:1.25rem}.input-addon.input-addon-sm{font-size:.8rem;height:1.75rem;line-height:1.75rem}.input-addon.input-addon-lg{font-size:1.25rem;height:2.75rem;line-height:2.75rem}.input-addon.input-addon-xl{font-size:1.5rem;height:3.25rem;line-height:3.25rem}.input-icon{position:relative;width:100%}.input-icon select{position:static}.input-icon input:not(:first-child),.input-icon select:not(:first-child){padding-left:2em}.input-icon input:not(:last-child){padding-right:2em}.input-icon :first-child:not(input):not(select),.input-icon :last-child:not(input):not(select){position:absolute;top:0;left:.5em;height:2.25rem;line-height:2.25rem;color:#aaa;vertical-align:middle;pointer-events:none}.input-icon :last-child:not(input):not(select){left:auto;right:.5em}.input-icon.input-icon-xs :first-child:not(input):not(select),.input-icon.input-icon-xs :last-child:not(input):not(select){font-size:.7rem;height:1.25rem;line-height:1.25rem}.input-icon.input-icon-sm :first-child:not(input):not(select),.input-icon.input-icon-sm :last-child:not(input):not(select){font-size:.8rem;height:1.75rem;line-height:1.75rem}.input-icon.input-icon-lg :first-child:not(input):not(select),.input-icon.input-icon-lg :last-child:not(input):not(select){font-size:1.25rem;height:2.75rem;line-height:2.75rem}.input-icon.input-icon-xl :first-child:not(input):not(select),.input-icon.input-icon-xl :last-child:not(input):not(select){font-size:1.5rem;height:3.25rem;line-height:3.25rem}.input-invalid label{color:#ff4136!important}.input-invalid input,.input-invalid select{color:#ff4136!important;border-color:#ff4136!important}.input-invalid .input-icon :first-child:not(input):not(select),.input-invalid .input-icon :last-child:not(input):not(select){color:#ff4136}.input-valid label{color:#2ecc40!important}.input-valid input,.input-valid select{color:#2ecc40!important;border-color:#2ecc40!important}.input-valid .input-icon :first-child:not(input):not(select),.input-valid .input-icon :last-child:not(input):not(select){color:#2ecc40}
+/*! File buttons */.file-button input[type=file]{position:absolute;height:1px;width:1px;background:none;border:0;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);overflow:hidden;padding:0}.file-button input[type=file]:focus+label{-webkit-box-shadow:0 0 0 2px rgba(0,116,217,.5);box-shadow:0 0 0 2px rgba(0,116,217,.5)}.file-button input[type=file]:focus+label.button-secondary{-webkit-box-shadow:0 0 0 2px hsla(0,0%,67%,.5);box-shadow:0 0 0 2px hsla(0,0%,67%,.5)}.file-button input[type=file]:focus+label.button-success{-webkit-box-shadow:0 0 0 2px rgba(46,204,64,.5);box-shadow:0 0 0 2px rgba(46,204,64,.5)}.file-button input[type=file]:focus+label.button-info{-webkit-box-shadow:0 0 0 2px rgba(57,204,204,.5);box-shadow:0 0 0 2px rgba(57,204,204,.5)}.file-button input[type=file]:focus+label.button-warning{-webkit-box-shadow:0 0 0 2px rgba(255,133,27,.5);box-shadow:0 0 0 2px rgba(255,133,27,.5)}.file-button input[type=file]:focus+label.button-danger{-webkit-box-shadow:0 0 0 2px rgba(255,65,54,.5);box-shadow:0 0 0 2px rgba(255,65,54,.5)}.file-button input[type=file]:focus+label.button-light{-webkit-box-shadow:0 0 0 2px hsla(0,0%,90%,.5);box-shadow:0 0 0 2px hsla(0,0%,90%,.5)}.file-button input[type=file]:focus+label.button-dark{-webkit-box-shadow:0 0 0 2px rgba(41,41,41,.5);box-shadow:0 0 0 2px rgba(41,41,41,.5)}
+
+/*! Forms */fieldset{border:1px solid #ddd;border-radius:.25rem;padding:1.5rem 2rem;margin-bottom:1.5rem}fieldset legend{font-weight:700;padding:0 .25rem}fieldset>:last-child{margin-bottom:0}label{color:inherit;display:inline-block;margin-bottom:.25rem}label+label{margin-left:1rem}input[type=color],input[type=date],input[type=datetime-local],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{width:100%;font-family:inherit;font-size:1rem;font-weight:inherit;color:#111;border:1px solid #ddd;border-radius:.25rem;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);background-color:#fff;height:2.25rem;line-height:2.25rem;vertical-align:middle;display:block;padding-left:.5rem;padding-right:.5rem;margin:0;-webkit-transition:border-color .1s,background-color .1s,color .1s;transition:border-color .1s,background-color .1s,color .1s;white-space:nowrap;-moz-appearance:none;-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{outline:none;border-color:#0074d9}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled],select[disabled],textarea[disabled]{opacity:.5;cursor:not-allowed}input[type=color][readonly],input[type=date][readonly],input[type=datetime-local][readonly],input[type=email][readonly],input[type=month][readonly],input[type=number][readonly],input[type=password][readonly],input[type=search][readonly],input[type=tel][readonly],input[type=text][readonly],input[type=time][readonly],input[type=url][readonly],input[type=week][readonly],select[readonly],textarea[readonly]{background-color:#f2f2f2}input[type=color][type=color],input[type=date][type=color],input[type=datetime-local][type=color],input[type=email][type=color],input[type=month][type=color],input[type=number][type=color],input[type=password][type=color],input[type=search][type=color],input[type=tel][type=color],input[type=text][type=color],input[type=time][type=color],input[type=url][type=color],input[type=week][type=color],select[type=color],textarea[type=color]{padding:.5rem}input[type=color][type=color]::-webkit-color-swatch-wrapper,input[type=date][type=color]::-webkit-color-swatch-wrapper,input[type=datetime-local][type=color]::-webkit-color-swatch-wrapper,input[type=email][type=color]::-webkit-color-swatch-wrapper,input[type=month][type=color]::-webkit-color-swatch-wrapper,input[type=number][type=color]::-webkit-color-swatch-wrapper,input[type=password][type=color]::-webkit-color-swatch-wrapper,input[type=search][type=color]::-webkit-color-swatch-wrapper,input[type=tel][type=color]::-webkit-color-swatch-wrapper,input[type=text][type=color]::-webkit-color-swatch-wrapper,input[type=time][type=color]::-webkit-color-swatch-wrapper,input[type=url][type=color]::-webkit-color-swatch-wrapper,input[type=week][type=color]::-webkit-color-swatch-wrapper,select[type=color]::-webkit-color-swatch-wrapper,textarea[type=color]::-webkit-color-swatch-wrapper{padding:0}input[type=color][type=color]::-webkit-color-swatch,input[type=date][type=color]::-webkit-color-swatch,input[type=datetime-local][type=color]::-webkit-color-swatch,input[type=email][type=color]::-webkit-color-swatch,input[type=month][type=color]::-webkit-color-swatch,input[type=number][type=color]::-webkit-color-swatch,input[type=password][type=color]::-webkit-color-swatch,input[type=search][type=color]::-webkit-color-swatch,input[type=tel][type=color]::-webkit-color-swatch,input[type=text][type=color]::-webkit-color-swatch,input[type=time][type=color]::-webkit-color-swatch,input[type=url][type=color]::-webkit-color-swatch,input[type=week][type=color]::-webkit-color-swatch,select[type=color]::-webkit-color-swatch,textarea[type=color]::-webkit-color-swatch{border:none;border-radius:.25rem}input[type=color].input-xs,input[type=date].input-xs,input[type=datetime-local].input-xs,input[type=email].input-xs,input[type=month].input-xs,input[type=number].input-xs,input[type=password].input-xs,input[type=search].input-xs,input[type=tel].input-xs,input[type=text].input-xs,input[type=time].input-xs,input[type=url].input-xs,input[type=week].input-xs,select.input-xs,textarea.input-xs{font-size:.7rem;height:1.25rem;line-height:1.25rem}input[type=color].input-sm,input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=email].input-sm,input[type=month].input-sm,input[type=number].input-sm,input[type=password].input-sm,input[type=search].input-sm,input[type=tel].input-sm,input[type=text].input-sm,input[type=time].input-sm,input[type=url].input-sm,input[type=week].input-sm,select.input-sm,textarea.input-sm{font-size:.8rem;height:1.75rem;line-height:1.75rem}input[type=color].input-lg,input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=email].input-lg,input[type=month].input-lg,input[type=number].input-lg,input[type=password].input-lg,input[type=search].input-lg,input[type=tel].input-lg,input[type=text].input-lg,input[type=time].input-lg,input[type=url].input-lg,input[type=week].input-lg,select.input-lg,textarea.input-lg{font-size:1.25rem;height:2.75rem;line-height:2.75rem}input[type=color].input-xl,input[type=date].input-xl,input[type=datetime-local].input-xl,input[type=email].input-xl,input[type=month].input-xl,input[type=number].input-xl,input[type=password].input-xl,input[type=search].input-xl,input[type=tel].input-xl,input[type=text].input-xl,input[type=time].input-xl,input[type=url].input-xl,input[type=week].input-xl,select.input-xl,textarea.input-xl{font-size:1.5rem;height:3.25rem;line-height:3.25rem}input[type=checkbox],input[type=radio]{vertical-align:1px}select{position:relative;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='41' height='26' viewBox='0 0 41 26' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23000' d='M0 5.382l19.983 19.983L40.14 5.208 34.932 0 19.869 15.062 4.84.032z' fill-rule='evenodd'/%3E%3C/svg%3E");background-position:right .4rem center;background-repeat:no-repeat;background-size:.75rem;padding-top:0;padding-bottom:0;padding-right:1.5rem}textarea,textarea.input-lg,textarea.input-sm,textarea.input-xl,textarea.input-xs{height:auto;resize:vertical;line-height:1.5;white-space:normal}input[type=range]{-webkit-appearance:none;width:100%;height:2.25rem;line-height:2.25rem;vertical-align:middle}input[type=range]:focus{outline:none}input[type=range]::-webkit-slider-runnable-track{width:100%;height:.5rem;cursor:pointer;background:#f2f2f2;border-radius:.25rem;border:none;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}input[type=range]::-webkit-slider-thumb{border:none;width:1.25rem;height:1.25rem;border-radius:50%;background:#0074d9;cursor:pointer;-webkit-appearance:none;margin-top:-.375rem}input[type=range]:focus::-webkit-slider-runnable-track{background:#f2f2f2}input[type=range]:focus::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 2px rgba(0,116,217,.5);box-shadow:0 0 0 2px rgba(0,116,217,.5)}input[type=range]::-moz-range-track{width:100%;height:.5rem;cursor:pointer;background:#f2f2f2;border-radius:.25rem;border:none;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}input[type=range]::-moz-range-thumb{border:none;height:1.25rem;width:1.25rem;border-radius:50%;background:#0074d9;cursor:pointer}input[type=range]:focus::-moz-range-thumb{box-shadow:0 0 0 2px rgba(0,116,217,.5)}input[type=range]::-ms-track{width:100%;height:.5rem;cursor:pointer;background:transparent;border-color:transparent;color:transparent}input[type=range]::-ms-fill-lower,input[type=range]::-ms-fill-upper{background:#f2f2f2;border:none;border-radius:.25rem}input[type=range]::-ms-thumb{border:none;height:1.25rem;width:1.25rem;border-radius:50%;background:#0074d9;cursor:pointer;margin-top:-.25rem}input[type=range]:focus::-ms-thumb{box-shadow:0 0 0 2px rgba(0,116,217,.5)}input[type=range]:focus::-ms-fill-lower,input[type=range]:focus::-ms-fill-upper{background:#f2f2f2}.input-field,.input-group{margin-bottom:1.5rem}.input-group{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.input-group>.button,.input-group>.dropdown .button,.input-group>.dropdown button,.input-group>.file-button label,.input-group>.input-icon input,.input-group>.input-icon select,.input-group>button,.input-group>input{border-radius:0}.input-group>.button:first-child,.input-group>.dropdown:first-child .button,.input-group>.dropdown:first-child button,.input-group>.file-button:first-child label,.input-group>.input-icon:first-child input,.input-group>.input-icon:first-child select,.input-group>button:first-child,.input-group>input:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.input-group>.button:last-child,.input-group>.dropdown:last-child .button,.input-group>.dropdown:last-child button,.input-group>.file-button:last-child label,.input-group>.input-icon:last-child input,.input-group>.input-icon:last-child select,.input-group>button:last-child,.input-group>input:last-child{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.input-group>input+input{border-left-width:0}.input-group>input+input:focus{border-left-width:1px;margin-left:-1px}.input-group .button:focus,.input-group .file-button input[type=file]:focus+label,.input-group button:focus{-webkit-transform:translateZ(0);transform:translateZ(0)}.input-addon{font-size:1rem;height:2.25rem;line-height:2.25rem;border-top:1px solid #ddd;border-bottom:1px solid #ddd;background:#f2f2f2;color:#aaa;padding:0 .5rem;white-space:nowrap}.input-addon:first-child{border-left:1px solid #ddd;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.input-addon:last-child{border-right:1px solid #ddd;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.input-addon.input-addon-xs{font-size:.7rem;height:1.25rem;line-height:1.25rem}.input-addon.input-addon-sm{font-size:.8rem;height:1.75rem;line-height:1.75rem}.input-addon.input-addon-lg{font-size:1.25rem;height:2.75rem;line-height:2.75rem}.input-addon.input-addon-xl{font-size:1.5rem;height:3.25rem;line-height:3.25rem}.input-icon{position:relative;width:100%}.input-icon select{position:static}.input-icon input:not(:first-child),.input-icon select:not(:first-child){padding-left:2em}.input-icon input:not(:last-child){padding-right:2em}.input-icon :first-child:not(input):not(select),.input-icon :last-child:not(input):not(select){position:absolute;top:0;left:.5em;height:2.25rem;line-height:2.25rem;color:#aaa;vertical-align:middle;pointer-events:none}.input-icon :last-child:not(input):not(select){left:auto;right:.5em}.input-icon.input-icon-xs :first-child:not(input):not(select),.input-icon.input-icon-xs :last-child:not(input):not(select){font-size:.7rem;height:1.25rem;line-height:1.25rem}.input-icon.input-icon-sm :first-child:not(input):not(select),.input-icon.input-icon-sm :last-child:not(input):not(select){font-size:.8rem;height:1.75rem;line-height:1.75rem}.input-icon.input-icon-lg :first-child:not(input):not(select),.input-icon.input-icon-lg :last-child:not(input):not(select){font-size:1.25rem;height:2.75rem;line-height:2.75rem}.input-icon.input-icon-xl :first-child:not(input):not(select),.input-icon.input-icon-xl :last-child:not(input):not(select){font-size:1.5rem;height:3.25rem;line-height:3.25rem}.input-invalid label{color:#ff4136!important}.input-invalid input,.input-invalid select{color:#ff4136!important;border-color:#ff4136!important}.input-invalid .input-icon :first-child:not(input):not(select),.input-invalid .input-icon :last-child:not(input):not(select){color:#ff4136}.input-valid label{color:#2ecc40!important}.input-valid input,.input-valid select{color:#2ecc40!important;border-color:#2ecc40!important}.input-valid .input-icon :first-child:not(input):not(select),.input-valid .input-icon :last-child:not(input):not(select){color:#2ecc40}
/*! Grid System
diff --git a/docs/alerts.html b/docs/alerts.html
index 65bf6aad3..58a28aceb 100644
--- a/docs/alerts.html
+++ b/docs/alerts.html
@@ -36,6 +36,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders
diff --git a/docs/attribution.html b/docs/attribution.html
index d508ad46e..c4086cd06 100644
--- a/docs/attribution.html
+++ b/docs/attribution.html
@@ -36,6 +36,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders
diff --git a/docs/badges.html b/docs/badges.html
index ef8a4fedd..272712981 100644
--- a/docs/badges.html
+++ b/docs/badges.html
@@ -36,6 +36,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders
diff --git a/docs/browser-support.html b/docs/browser-support.html
index 239de8516..2ef50dc8a 100644
--- a/docs/browser-support.html
+++ b/docs/browser-support.html
@@ -36,6 +36,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders
diff --git a/docs/buttons.html b/docs/buttons.html
index 49bc1a318..61be4ff78 100644
--- a/docs/buttons.html
+++ b/docs/buttons.html
@@ -36,6 +36,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders
@@ -164,18 +165,6 @@
Button
-
-File inputs are notoriously hard to style properly in every browser. Shoelace offers file buttons as an alternative. These are much easier to style consistently, but come with the caveat that the name (or number) of files selected will not be automatically shown to the user. This aspect of a file button’s UX can be handled effectively with JavaScript, but this is left as an exercise for the user .
-File buttons are simply <label> elements with the button class and a nested file input.
-<label class="button">
- Select File
- <input type="file">
-</label>
-
-
- Select File
-
-
diff --git a/docs/content.html b/docs/content.html
index d0c96f523..dc38c9da6 100644
--- a/docs/content.html
+++ b/docs/content.html
@@ -36,6 +36,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders
diff --git a/docs/customizing.html b/docs/customizing.html
index 92fa4dc52..3db8ad6ab 100644
--- a/docs/customizing.html
+++ b/docs/customizing.html
@@ -36,6 +36,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders
diff --git a/docs/dropdowns.html b/docs/dropdowns.html
index d8bd8f929..0c77c2e14 100644
--- a/docs/dropdowns.html
+++ b/docs/dropdowns.html
@@ -36,6 +36,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders
diff --git a/docs/file-buttons.html b/docs/file-buttons.html
new file mode 100644
index 000000000..f1e725146
--- /dev/null
+++ b/docs/file-buttons.html
@@ -0,0 +1,190 @@
+
+
+
+
+
+
+
+
+
+
+
+ File Buttons
+
+
+
+
+
+
+
+ A back to the basics CSS starter kit. For when you don’t need the whole boot.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/forms.html b/docs/forms.html
index c8050530b..73c766892 100644
--- a/docs/forms.html
+++ b/docs/forms.html
@@ -37,6 +37,7 @@
Badges
Buttons
Dropdowns
+
File Buttons
Forms
Grid System
Loaders
@@ -89,11 +90,14 @@
<input type="file">
- File inputs aren’t supported. Use a file button instead.
+ File inputs aren’t supported. Use a file button instead.
- Select File
+
+
+ Select File
+
diff --git a/docs/grid-system.html b/docs/grid-system.html
index b5cdd6c37..9ba391472 100644
--- a/docs/grid-system.html
+++ b/docs/grid-system.html
@@ -36,6 +36,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders
diff --git a/docs/icons.html b/docs/icons.html
index b530879c3..90bb29a07 100644
--- a/docs/icons.html
+++ b/docs/icons.html
@@ -37,6 +37,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders
diff --git a/docs/installing.html b/docs/installing.html
index a98cbc52c..4f6ec7cd4 100644
--- a/docs/installing.html
+++ b/docs/installing.html
@@ -36,6 +36,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders
diff --git a/docs/loaders.html b/docs/loaders.html
index 05f4d18e8..dc57f73b1 100644
--- a/docs/loaders.html
+++ b/docs/loaders.html
@@ -36,6 +36,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders
diff --git a/docs/progress-bars.html b/docs/progress-bars.html
index 9f16595b5..e98d6ff5a 100644
--- a/docs/progress-bars.html
+++ b/docs/progress-bars.html
@@ -36,6 +36,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders
diff --git a/docs/switches.html b/docs/switches.html
index 6df951ad8..b55fde361 100644
--- a/docs/switches.html
+++ b/docs/switches.html
@@ -36,6 +36,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders
diff --git a/docs/tables.html b/docs/tables.html
index 6a5250d32..cedfe7bf1 100644
--- a/docs/tables.html
+++ b/docs/tables.html
@@ -36,6 +36,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders
diff --git a/docs/tabs.html b/docs/tabs.html
index f005453c9..45a5b3585 100644
--- a/docs/tabs.html
+++ b/docs/tabs.html
@@ -36,6 +36,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders
diff --git a/docs/utilities.html b/docs/utilities.html
index ccba51b49..d38ceed87 100644
--- a/docs/utilities.html
+++ b/docs/utilities.html
@@ -36,6 +36,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders
diff --git a/source/css/buttons.css b/source/css/buttons.css
index 6f1bab79c..d9fd1b5d9 100644
--- a/source/css/buttons.css
+++ b/source/css/buttons.css
@@ -311,11 +311,6 @@ button,
}
}
-/* File buttons */
-label.button input[type="file"] {
- display: none;
-}
-
/* Loader buttons */
.button-loader,
.button-loader:hover {
diff --git a/source/css/file-buttons.css b/source/css/file-buttons.css
new file mode 100644
index 000000000..a44aa53f5
--- /dev/null
+++ b/source/css/file-buttons.css
@@ -0,0 +1,25 @@
+/*! File buttons */
+
+.file-button {
+ & input[type="file"] {
+ position: absolute;
+ height: 1px;
+ width: 1px;
+ background: none;
+ border: 0;
+ clip: rect(0 0 0 0);
+ clip-path: inset(50%);
+ overflow: hidden;
+ padding: 0;
+
+ /* When the input receives focus, simulate button focus states on the label */
+ &:focus + label { box-shadow: 0 0 0 var(--button-focus-width) color(var(--button-bg-color) alpha(50%)); }
+ &:focus + label.button-secondary { box-shadow: 0 0 0 var(--button-focus-width) color(var(--button-bg-color-secondary) alpha(50%)); }
+ &:focus + label.button-success { box-shadow: 0 0 0 var(--button-focus-width) color(var(--button-bg-color-success) alpha(50%)); }
+ &:focus + label.button-info { box-shadow: 0 0 0 var(--button-focus-width) color(var(--button-bg-color-info) alpha(50%)); }
+ &:focus + label.button-warning { box-shadow: 0 0 0 var(--button-focus-width) color(var(--button-bg-color-warning) alpha(50%)); }
+ &:focus + label.button-danger { box-shadow: 0 0 0 var(--button-focus-width) color(var(--button-bg-color-danger) alpha(50%)); }
+ &:focus + label.button-light { box-shadow: 0 0 0 var(--button-focus-width) color(var(--button-bg-color-light) alpha(50%)); }
+ &:focus + label.button-dark { box-shadow: 0 0 0 var(--button-focus-width) color(var(--button-bg-color-dark) alpha(50%)); }
+ }
+}
diff --git a/source/css/forms.css b/source/css/forms.css
index 7df145eb9..5f7016120 100644
--- a/source/css/forms.css
+++ b/source/css/forms.css
@@ -273,6 +273,7 @@ input[type="range"] {
& > .button,
& > .dropdown button,
& > .dropdown .button,
+ & > .file-button label,
& > .input-icon input,
& > .input-icon select {
border-radius: 0;
@@ -283,6 +284,7 @@ input[type="range"] {
& > .button:first-child,
& > .dropdown:first-child button,
& > .dropdown:first-child .button,
+ & > .file-button:first-child label,
& > .input-icon:first-child input,
& > .input-icon:first-child select {
border-top-left-radius: var(--input-border-radius);
@@ -294,6 +296,7 @@ input[type="range"] {
& > .button:last-child,
& > .dropdown:last-child button,
& > .dropdown:last-child .button,
+ & > .file-button:last-child label,
& > .input-icon:last-child input,
& > .input-icon:last-child select {
border-top-right-radius: var(--input-border-radius);
@@ -309,9 +312,10 @@ input[type="range"] {
margin-left: calc(var(--input-border-width) * -1);
}
+ /* Force a new stacking context so focus rings don't get truncated by adjacent elements */
& button:focus,
- & .button:focus {
- /* Force a new stacking context so focus rings don't get truncated by adjacent elements */
+ & .button:focus,
+ & .file-button input[type="file"]:focus + label {
transform: translateZ(0);
}
}
diff --git a/source/css/shoelace.css b/source/css/shoelace.css
index d57e9fbeb..43cbb2977 100644
--- a/source/css/shoelace.css
+++ b/source/css/shoelace.css
@@ -12,6 +12,7 @@
@import url('badges.css');
@import url('buttons.css');
@import url('dropdowns.css');
+@import url('file-buttons.css');
@import url('forms.css');
@import url('grid.css');
@import url('loaders.css');
diff --git a/source/docs/buttons.md b/source/docs/buttons.md
index 7817ebd0a..070fbb85b 100644
--- a/source/docs/buttons.md
+++ b/source/docs/buttons.md
@@ -147,20 +147,3 @@ Loader buttons also work with button variations.
Button
Button
-
-### File Buttons
-
-File inputs are notoriously hard to style properly in every browser. Shoelace offers file buttons as an alternative. These are much easier to style consistently, but come with the caveat that the name (or number) of files selected will not be automatically shown to the user. This aspect of a file button’s UX can be handled effectively with JavaScript, but this is left as an [exercise for the user](https://stackoverflow.com/questions/2189615/how-to-get-file-name-when-user-select-a-file-via-input-type-file).
-
-File buttons are simply `` elements with the `button` class and a nested file input.
-
-```html
-
- Select File
-
-
-```
-
-
- Select File
-
diff --git a/source/docs/file-buttons.md b/source/docs/file-buttons.md
new file mode 100644
index 000000000..b60f62c94
--- /dev/null
+++ b/source/docs/file-buttons.md
@@ -0,0 +1,110 @@
+---
+layout: default.html
+title: File Buttons
+description: Add buttons to let users select files in your app.
+---
+
+## File Buttons
+
+File inputs are notoriously hard to style consistently in every browser. Shoelace offers file buttons as an alternative.
+
+File buttons are much easier to style, but come with the caveat that the name and number of files selected will not be automatically shown to the user. This aspect of a file button’s UX can be handled effectively with JavaScript, but this is left as an [exercise for the user](https://stackoverflow.com/questions/2189615/how-to-get-file-name-when-user-select-a-file-via-input-type-file).
+
+To create a file button, use the following markup. Note that the input needs to have an `id` and the label needs to have a matching `for` attribute. The label also needs to have the `button` class.
+
+```html
+
+
+ Select File
+
+```
+
+
+
+ Select File
+
+
+This approach is a bit more verbose than simply wrapping the input with a label, but the extra markup makes file buttons accessible via keyboard.
+
+You can allow multiple files to be selected by adding the `multiple` attribute:
+
+```html
+
+
+ Select Files
+
+```
+
+
+
+ Select Files
+
+
+### Variations
+
+File buttons can use [button modifiers](buttons.html). Just apply the appropriate classes to the label.
+
+
+
+ Browse
+
+
+
+ Browse
+
+
+
+ Browse
+
+
+
+ Browse
+
+
+
+ Browse
+
+
+
+
+ Browse
+
+
+
+ Browse
+
+
+
+ Browse
+
+
+
+ Browse
+
+
+
+ Browse
+
+
+
+ Browse
+
+
+
+ Browse
+
+
+
+ Browse
+
+
+You can also use file buttons in [input groups](forms.html#input-groups).
+
+
+
+
+ Select File
+
+
+ Submit
+
diff --git a/source/docs/forms.md b/source/docs/forms.md
index 9eee10a40..393952ec9 100644
--- a/source/docs/forms.md
+++ b/source/docs/forms.md
@@ -46,11 +46,14 @@ Form controls are styled at 100% of the width of their parent element.
<input type="file">
- File inputs aren’t supported. Use a [file button](buttons.html#file-buttons) instead.
+ File inputs aren’t supported. Use a [file button](file-buttons.html) instead.
- Select File
+
+
+ Select File
+
diff --git a/source/layouts/default.html b/source/layouts/default.html
index 63917d5a7..5c7b33da3 100644
--- a/source/layouts/default.html
+++ b/source/layouts/default.html
@@ -39,6 +39,7 @@
Badges
Buttons
Dropdowns
+ File Buttons
Forms
Grid System
Loaders