diff --git a/plist b/plist index b5d7aeee4b2..6cc20c9dfa3 100644 --- a/plist +++ b/plist @@ -2093,6 +2093,125 @@ /usr/local/opnsense/www/js/widgets/ThermalSensors.js /usr/local/opnsense/www/js/widgets/Traffic.js /usr/local/opnsense/www/js/widgets/Wireguard.js +/usr/local/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.eot +/usr/local/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.otf +/usr/local/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.ttf +/usr/local/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.woff +/usr/local/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Regular/SourceSansPro-Regular.eot +/usr/local/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Regular/SourceSansPro-Regular.otf +/usr/local/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Regular/SourceSansPro-Regular.ttf +/usr/local/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Regular/SourceSansPro-Regular.woff +/usr/local/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.eot +/usr/local/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.otf +/usr/local/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.ttf +/usr/local/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.woff +/usr/local/opnsense/www/themes/opnsense-dark/assets/fonts/bootstrap/glyphicons-halflings-regular.eot +/usr/local/opnsense/www/themes/opnsense-dark/assets/fonts/bootstrap/glyphicons-halflings-regular.svg +/usr/local/opnsense/www/themes/opnsense-dark/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf +/usr/local/opnsense/www/themes/opnsense-dark/assets/fonts/bootstrap/glyphicons-halflings-regular.woff +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap-dialog.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap-select.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_alerts.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_badges.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_breadcrumbs.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_button-groups.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_buttons.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_carousel.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_close.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_code.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_component-animations.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_dropdowns.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_forms.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_glyphicons.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_grid.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_input-groups.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_jumbotron.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_labels.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_list-group.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_media.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_mixins.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_modals.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_navbar.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_navs.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_normalize.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_pager.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_pagination.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_panels.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_popovers.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_print.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_progress-bars.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_responsive-embed.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_responsive-utilities.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_scaffolding.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_tables.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_theme.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_thumbnails.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_tooltip.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_type.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_utilities.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_variables.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_wells.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_alerts.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_background-variant.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_border-radius.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_buttons.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_center-block.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_clearfix.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_forms.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_gradients.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_grid.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_hide-text.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_image.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_labels.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_list-group.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_opacity.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_pagination.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_panels.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_progress-bar.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_resize.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_size.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_table-row.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_text-overflow.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/config/colors.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/dashboard.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/dns-overview.scss +/usr/local/opnsense/www/themes/opnsense-dark/assets/stylesheets/main.scss +/usr/local/opnsense/www/themes/opnsense-dark/build/css/bootstrap-dialog.css +/usr/local/opnsense/www/themes/opnsense-dark/build/css/bootstrap-select.css +/usr/local/opnsense/www/themes/opnsense-dark/build/css/dashboard.css +/usr/local/opnsense/www/themes/opnsense-dark/build/css/dns-overview.css +/usr/local/opnsense/www/themes/opnsense-dark/build/css/main.css +/usr/local/opnsense/www/themes/opnsense-dark/build/css/nv.d3.css +/usr/local/opnsense/www/themes/opnsense-dark/build/css/tokenize2.css +/usr/local/opnsense/www/themes/opnsense-dark/build/fonts/LICENSE.SourceSansPro.txt +/usr/local/opnsense/www/themes/opnsense-dark/build/fonts/SourceSansPro-Bold/SourceSansPro-Bold.eot +/usr/local/opnsense/www/themes/opnsense-dark/build/fonts/SourceSansPro-Bold/SourceSansPro-Bold.otf +/usr/local/opnsense/www/themes/opnsense-dark/build/fonts/SourceSansPro-Bold/SourceSansPro-Bold.ttf +/usr/local/opnsense/www/themes/opnsense-dark/build/fonts/SourceSansPro-Bold/SourceSansPro-Bold.woff +/usr/local/opnsense/www/themes/opnsense-dark/build/fonts/SourceSansPro-Regular/SourceSansPro-Regular.eot +/usr/local/opnsense/www/themes/opnsense-dark/build/fonts/SourceSansPro-Regular/SourceSansPro-Regular.otf +/usr/local/opnsense/www/themes/opnsense-dark/build/fonts/SourceSansPro-Regular/SourceSansPro-Regular.ttf +/usr/local/opnsense/www/themes/opnsense-dark/build/fonts/SourceSansPro-Regular/SourceSansPro-Regular.woff +/usr/local/opnsense/www/themes/opnsense-dark/build/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.eot +/usr/local/opnsense/www/themes/opnsense-dark/build/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.otf +/usr/local/opnsense/www/themes/opnsense-dark/build/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.ttf +/usr/local/opnsense/www/themes/opnsense-dark/build/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.woff +/usr/local/opnsense/www/themes/opnsense-dark/build/fonts/bootstrap/glyphicons-halflings-regular.eot +/usr/local/opnsense/www/themes/opnsense-dark/build/fonts/bootstrap/glyphicons-halflings-regular.svg +/usr/local/opnsense/www/themes/opnsense-dark/build/fonts/bootstrap/glyphicons-halflings-regular.ttf +/usr/local/opnsense/www/themes/opnsense-dark/build/fonts/bootstrap/glyphicons-halflings-regular.woff +/usr/local/opnsense/www/themes/opnsense-dark/build/images/caret.png +/usr/local/opnsense/www/themes/opnsense-dark/build/images/default-logo.svg +/usr/local/opnsense/www/themes/opnsense-dark/build/images/favicon.png +/usr/local/opnsense/www/themes/opnsense-dark/build/images/icon-logo.svg /usr/local/opnsense/www/themes/opnsense/LICENSE /usr/local/opnsense/www/themes/opnsense/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.eot /usr/local/opnsense/www/themes/opnsense/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.otf diff --git a/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.eot b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.eot new file mode 100644 index 00000000000..e9f423425ce Binary files /dev/null and b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.eot differ diff --git a/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.otf b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.otf new file mode 100644 index 00000000000..98dbee74d5d Binary files /dev/null and b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.otf differ diff --git a/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.ttf b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.ttf new file mode 100755 index 00000000000..5d65c93242f Binary files /dev/null and b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.ttf differ diff --git a/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.woff b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.woff new file mode 100644 index 00000000000..d1d40f840f8 Binary files /dev/null and b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Bold/SourceSansPro-Bold.woff differ diff --git a/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Regular/SourceSansPro-Regular.eot b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Regular/SourceSansPro-Regular.eot new file mode 100644 index 00000000000..ba7f8d95152 Binary files /dev/null and b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Regular/SourceSansPro-Regular.eot differ diff --git a/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Regular/SourceSansPro-Regular.otf b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Regular/SourceSansPro-Regular.otf new file mode 100644 index 00000000000..bdcfb27a4fd Binary files /dev/null and b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Regular/SourceSansPro-Regular.otf differ diff --git a/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Regular/SourceSansPro-Regular.ttf b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Regular/SourceSansPro-Regular.ttf new file mode 100755 index 00000000000..44486cdc670 Binary files /dev/null and b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Regular/SourceSansPro-Regular.ttf differ diff --git a/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Regular/SourceSansPro-Regular.woff b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Regular/SourceSansPro-Regular.woff new file mode 100644 index 00000000000..460ab12a638 Binary files /dev/null and b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Regular/SourceSansPro-Regular.woff differ diff --git a/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.eot b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.eot new file mode 100644 index 00000000000..2f7a52c4543 Binary files /dev/null and b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.eot differ diff --git a/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.otf b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.otf new file mode 100644 index 00000000000..fffdbafeb73 Binary files /dev/null and b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.otf differ diff --git a/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.ttf b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.ttf new file mode 100755 index 00000000000..86b00c067e0 Binary files /dev/null and b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.ttf differ diff --git a/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.woff b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.woff new file mode 100644 index 00000000000..43379631b2d Binary files /dev/null and b/src/opnsense/www/themes/opnsense-dark/assets/fonts/SourceSansPro-Semibold/SourceSansPro-Semibold.woff differ diff --git a/src/opnsense/www/themes/opnsense-dark/assets/fonts/bootstrap/glyphicons-halflings-regular.eot b/src/opnsense/www/themes/opnsense-dark/assets/fonts/bootstrap/glyphicons-halflings-regular.eot new file mode 100644 index 00000000000..b93a4953fff Binary files /dev/null and b/src/opnsense/www/themes/opnsense-dark/assets/fonts/bootstrap/glyphicons-halflings-regular.eot differ diff --git a/src/opnsense/www/themes/opnsense-dark/assets/fonts/bootstrap/glyphicons-halflings-regular.svg b/src/opnsense/www/themes/opnsense-dark/assets/fonts/bootstrap/glyphicons-halflings-regular.svg new file mode 100644 index 00000000000..94fb5490a2e --- /dev/null +++ b/src/opnsense/www/themes/opnsense-dark/assets/fonts/bootstrap/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/opnsense/www/themes/opnsense-dark/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf b/src/opnsense/www/themes/opnsense-dark/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf new file mode 100644 index 00000000000..1413fc609ab Binary files /dev/null and b/src/opnsense/www/themes/opnsense-dark/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf differ diff --git a/src/opnsense/www/themes/opnsense-dark/assets/fonts/bootstrap/glyphicons-halflings-regular.woff b/src/opnsense/www/themes/opnsense-dark/assets/fonts/bootstrap/glyphicons-halflings-regular.woff new file mode 100644 index 00000000000..9e612858f80 Binary files /dev/null and b/src/opnsense/www/themes/opnsense-dark/assets/fonts/bootstrap/glyphicons-halflings-regular.woff differ diff --git a/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap-dialog.scss b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap-dialog.scss new file mode 100644 index 00000000000..d35cf56baf1 --- /dev/null +++ b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap-dialog.scss @@ -0,0 +1,139 @@ +@import "config/colors"; + +.modal-backdrop { + z-index: -1; +} + +.bootstrap-dialog { + + .modal-header { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + } + .bootstrap-dialog-title { + color: #fff; + display: inline-block; + } + .bootstrap-dialog-button-icon { + margin-right: 3px; + } + .bootstrap-dialog-close-button { + float: right; + filter:alpha(opacity=90); + -moz-opacity:0.9; + -khtml-opacity: 0.9; + opacity: 0.9; + &:hover { + cursor: pointer; + filter: alpha(opacity=100); + -moz-opacity: 1; + -khtml-opacity: 1; + opacity: 1; + } + } + + /* dialog types */ + &.type-default { + .modal-header { + background-color: #fff; + } + .bootstrap-dialog-title { + color: #333; + } + } + + &.type-info { + .modal-header { + background-color: #B0CDDB; + } + } + + &.type-primary { + .modal-header { + background-color: map-get($colors, brand-primary); + } + } + + &.type-success { + .modal-header { + background-color: #9BD275; + } + } + + &.type-warning { + .modal-header { + background-color: #f0ad4e; + } + } + + &.type-danger { + .modal-header { + background-color: #d9534f; + } + } + + &.size-large { + .bootstrap-dialog-title { + font-size: 24px; + } + .bootstrap-dialog-close-button { + font-size: 30px; + } + .bootstrap-dialog-message { + font-size: 18px; + } + } + + /** + * Icon animation + * Copied from font-awesome: http://fontawesome.io/ + **/ + .icon-spin { + display: inline-block; + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + -webkit-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; + } + @-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } + } + @-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } + } + @-o-keyframes spin { + 0% { + -o-transform: rotate(0deg); + } + 100% { + -o-transform: rotate(359deg); + } + } + @-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } + } + @keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } + } + /** End of icon animation **/ +} diff --git a/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap-select.scss b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap-select.scss new file mode 100644 index 00000000000..730794f123b --- /dev/null +++ b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap-select.scss @@ -0,0 +1,461 @@ +/*! + * Bootstrap-select v1.13.18 (https://developer.snapappointments.com/bootstrap-select) + * + * Copyright 2012-2020 SnapAppointments, LLC + * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE) + */ + +@import "config/colors"; + +@-webkit-keyframes bs-notify-fadeOut { + 0% { + opacity: 0.9; + } + 100% { + opacity: 0; + } +} +@-o-keyframes bs-notify-fadeOut { + 0% { + opacity: 0.9; + } + 100% { + opacity: 0; + } +} +@keyframes bs-notify-fadeOut { + 0% { + opacity: 0.9; + } + 100% { + opacity: 0; + } +} +select.bs-select-hidden, +.bootstrap-select > select.bs-select-hidden, +select.selectpicker { + display: none !important; +} +.bootstrap-select { + width: 348px \0; + /*IE9 and below*/ + vertical-align: middle; +} +.bootstrap-select > .dropdown-toggle { + position: relative; + width: 100%; + text-align: right; + white-space: nowrap; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; +} +.bootstrap-select > .dropdown-toggle:after { + margin-top: -1px; +} +.bootstrap-select > .dropdown-toggle.bs-placeholder, +.bootstrap-select > .dropdown-toggle.bs-placeholder:hover, +.bootstrap-select > .dropdown-toggle.bs-placeholder:focus, +.bootstrap-select > .dropdown-toggle.bs-placeholder:active { + color: #444; +} +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:hover, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:hover, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:hover, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:hover, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:hover, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:hover, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:focus, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:focus, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:focus, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:focus, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:focus, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:focus, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:active, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:active, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:active, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:active, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:active, +.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:active { + color: rgba(255, 255, 255, 0.5); +} +.bootstrap-select > select { + position: absolute !important; + bottom: 0; + left: 50%; + display: block !important; + width: 0.5px !important; + height: 100% !important; + padding: 0 !important; + opacity: 0 !important; + border: none; + z-index: 0 !important; +} +.bootstrap-select > select.mobile-device { + top: 0; + left: 0; + display: block !important; + width: 100% !important; + z-index: 2 !important; +} +.has-error .bootstrap-select .dropdown-toggle, +.error .bootstrap-select .dropdown-toggle, +.bootstrap-select.is-invalid .dropdown-toggle, +.was-validated .bootstrap-select select:invalid + .dropdown-toggle { + border-color: #b94a48; +} +.bootstrap-select.is-valid .dropdown-toggle, +.was-validated .bootstrap-select select:valid + .dropdown-toggle { + border-color: #28a745; +} +.bootstrap-select.fit-width { + width: auto !important; +} +.bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) { + width: 348px; +} +.bootstrap-select > select.mobile-device:focus + .dropdown-toggle, +.bootstrap-select .dropdown-toggle:focus { + outline: thin dotted #333333 !important; + outline: 5px auto -webkit-focus-ring-color !important; + outline-offset: -2px; +} +.bootstrap-select.form-control { + margin-bottom: 0; + padding: 0; + border: none; + height: auto; +} +:not(.input-group) > .bootstrap-select.form-control:not([class*="col-"]) { + width: 100%; +} +.bootstrap-select.form-control.input-group-btn { + float: none; + z-index: auto; +} +.form-inline .bootstrap-select, +.form-inline .bootstrap-select.form-control:not([class*="col-"]) { + width: auto; +} +.bootstrap-select:not(.input-group-btn), +.bootstrap-select[class*="col-"] { + float: none; + display: inline-block; + margin-left: 0; +} +.bootstrap-select.dropdown-menu-right, +.bootstrap-select[class*="col-"].dropdown-menu-right, +.row .bootstrap-select[class*="col-"].dropdown-menu-right { + float: right; +} +.form-inline .bootstrap-select, +.form-horizontal .bootstrap-select, +.form-group .bootstrap-select { + margin-bottom: 0; +} +.form-group-lg .bootstrap-select.form-control, +.form-group-sm .bootstrap-select.form-control { + padding: 0; +} +.form-group-lg .bootstrap-select.form-control .dropdown-toggle, +.form-group-sm .bootstrap-select.form-control .dropdown-toggle { + height: 100%; + font-size: inherit; + line-height: inherit; + border-radius: inherit; +} +.bootstrap-select.form-control-sm .dropdown-toggle, +.bootstrap-select.form-control-lg .dropdown-toggle { + font-size: inherit; + line-height: inherit; + border-radius: inherit; +} +.bootstrap-select.form-control-sm .dropdown-toggle { + padding: 0.25rem 0.5rem; +} +.bootstrap-select.form-control-lg .dropdown-toggle { + padding: 0.5rem 1rem; +} +.form-inline .bootstrap-select .form-control { + width: 100%; +} +.bootstrap-select.disabled, +.bootstrap-select > .disabled { + cursor: not-allowed; +} +.bootstrap-select.disabled:focus, +.bootstrap-select > .disabled:focus { + outline: none !important; +} +.bootstrap-select.bs-container { + position: absolute; + top: 0; + left: 0; + height: 0 !important; + padding: 0 !important; +} +.bootstrap-select.bs-container .dropdown-menu { + z-index: 9998; +} +.bootstrap-select .dropdown-toggle .filter-option { + position: static; + top: 0; + left: 0; + float: left; + height: 100%; + width: 100%; + text-align: left; + overflow: hidden; + -webkit-box-flex: 0; + -webkit-flex: 0 1 auto; + -ms-flex: 0 1 auto; + flex: 0 1 auto; +} +.bs3.bootstrap-select .dropdown-toggle .filter-option { + padding-right: inherit; +} +.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option { + position: absolute; + padding-top: inherit; + padding-bottom: inherit; + padding-left: inherit; + float: none; +} +.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option .filter-option-inner { + padding-right: inherit; +} +.bootstrap-select .dropdown-toggle .filter-option-inner-inner { + overflow: hidden; +} +.bootstrap-select .dropdown-toggle .filter-expand { + width: 0 !important; + float: left; + opacity: 0 !important; + overflow: hidden; +} +.bootstrap-select .dropdown-toggle .caret { + position: absolute; + top: 50%; + right: 12px; + margin-top: -2px; + vertical-align: middle; +} +.input-group .bootstrap-select.form-control .dropdown-toggle { + border-radius: inherit; +} +.bootstrap-select[class*="col-"] .dropdown-toggle { + width: 100%; +} +.bootstrap-select .dropdown-menu { + min-width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.bootstrap-select .dropdown-menu > .inner:focus { + outline: none !important; +} +.bootstrap-select .dropdown-menu.inner { + position: static; + float: none; + border: 0; + padding: 0; + margin: 0; + border-radius: 0; + -webkit-box-shadow: none; + box-shadow: none; +} +.bootstrap-select .dropdown-menu li { + position: relative; +} +.bootstrap-select .dropdown-menu li.active small { + color: rgba(255, 255, 255, 0.5) !important; +} +.bootstrap-select .dropdown-menu li.disabled a { + cursor: not-allowed; +} +.bootstrap-select .dropdown-menu li a { + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.bootstrap-select .dropdown-menu li a.opt { + position: relative; + padding-left: 2.25em; +} +.bootstrap-select .dropdown-menu li a span.check-mark { + display: none; +} +.bootstrap-select .dropdown-menu li a span.text { + display: inline-block; +} +.bootstrap-select .dropdown-menu li small { + padding-left: 0.5em; +} +.bootstrap-select .dropdown-menu .notify { + position: absolute; + bottom: 5px; + width: 96%; + margin: 0 2%; + min-height: 26px; + padding: 3px 5px; + background: map-get($colors, content-background); + border: 1px solid #e3e3e3; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + pointer-events: none; + opacity: 0.9; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.bootstrap-select .dropdown-menu .notify.fadeOut { + -webkit-animation: 300ms linear 750ms forwards bs-notify-fadeOut; + -o-animation: 300ms linear 750ms forwards bs-notify-fadeOut; + animation: 300ms linear 750ms forwards bs-notify-fadeOut; +} +.bootstrap-select .no-results { + padding: 3px; + background: map-get($colors, content-background); + margin: 0 5px; + white-space: nowrap; +} +.bootstrap-select.fit-width .dropdown-toggle .filter-option { + position: static; + display: inline; + padding: 0; +} +.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner, +.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner-inner { + display: inline; +} +.bootstrap-select.fit-width .dropdown-toggle .bs-caret:before { + content: '\00a0'; +} +.bootstrap-select.fit-width .dropdown-toggle .caret { + position: static; + top: auto; + margin-top: -1px; +} +.bootstrap-select.show-tick .dropdown-menu .selected span.check-mark { + position: absolute; + display: inline-block; + right: 15px; + top: 5px; +} +.bootstrap-select.show-tick .dropdown-menu li a span.text { + margin-right: 34px; +} +.bootstrap-select .bs-ok-default:after { + content: ''; + display: block; + width: 0.5em; + height: 1em; + border-style: solid; + border-width: 0 0.26em 0.26em 0; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); +} +.bootstrap-select.show-menu-arrow.open > .dropdown-toggle, +.bootstrap-select.show-menu-arrow.show > .dropdown-toggle { + z-index: 9999; +} +.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:before { + content: ''; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid rgba(204, 204, 204, 0.2); + position: absolute; + bottom: -4px; + left: 9px; + display: none; +} +.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:after { + content: ''; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid white; + position: absolute; + bottom: -4px; + left: 10px; + display: none; +} +.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:before { + bottom: auto; + top: -4px; + border-top: 7px solid rgba(204, 204, 204, 0.2); + border-bottom: 0; +} +.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:after { + bottom: auto; + top: -4px; + border-top: 6px solid white; + border-bottom: 0; +} +.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:before { + right: 12px; + left: auto; +} +.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:after { + right: 13px; + left: auto; +} +.bootstrap-select.show-menu-arrow.open > .dropdown-toggle .filter-option:before, +.bootstrap-select.show-menu-arrow.show > .dropdown-toggle .filter-option:before, +.bootstrap-select.show-menu-arrow.open > .dropdown-toggle .filter-option:after, +.bootstrap-select.show-menu-arrow.show > .dropdown-toggle .filter-option:after { + display: block; +} +.bs-searchbox, +.bs-actionsbox, +.bs-donebutton { + padding: 4px 8px; +} +.bs-actionsbox { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.bs-actionsbox .btn-group button { + width: 50%; +} +.bs-donebutton { + float: left; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.bs-donebutton .btn-group button { + width: 100%; +} +.bs-searchbox + .bs-actionsbox { + padding: 0 8px 4px; +} +.bs-searchbox .form-control { + margin-bottom: 0; + width: 100%; + float: none; +} diff --git a/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_alerts.scss b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_alerts.scss new file mode 100644 index 00000000000..e45de830585 --- /dev/null +++ b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_alerts.scss @@ -0,0 +1,68 @@ +// +// Alerts +// -------------------------------------------------- + + +// Base styles +// ------------------------- + +.alert { + padding: $alert-padding; + margin-bottom: $line-height-computed; + border: 1px solid transparent; + border-radius: $alert-border-radius; + + // Headings for larger alerts + h4 { + margin-top: 0; + // Specified for the h4 to prevent conflicts of changing $headings-color + color: inherit; + } + // Provide class for links that match alerts + .alert-link { + font-weight: $alert-link-font-weight; + } + + // Improve alignment and spacing of inner content + > p, + > ul { + margin-bottom: 0; + } + > p + p { + margin-top: 5px; + } +} + +// Dismissible alerts +// +// Expand the right padding and account for the close button's positioning. + +.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0. +.alert-dismissible { + padding-right: ($alert-padding + 20); + + // Adjust close link position + .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; + } +} + +// Alternate styles +// +// Generate contextual modifier classes for colorizing the alert. + +.alert-success { + @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text); +} +.alert-info { + @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text); +} +.alert-warning { + @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text); +} +.alert-danger { + @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text); +} diff --git a/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_badges.scss b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_badges.scss new file mode 100644 index 00000000000..02394ae7fa1 --- /dev/null +++ b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_badges.scss @@ -0,0 +1,57 @@ +// +// Badges +// -------------------------------------------------- + + +// Base class +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: $font-size-small; + font-weight: $badge-font-weight; + color: $badge-color; + line-height: $badge-line-height; + vertical-align: baseline; + white-space: nowrap; + text-align: center; + background-color: $badge-bg; + border-radius: $badge-border-radius; + + // Empty badges collapse automatically (not available in IE8) + &:empty { + display: none; + } + + // Quick fix for badges in buttons + .btn & { + position: relative; + top: -1px; + } + .btn-xs & { + top: 0; + padding: 1px 5px; + } + + // [converter] extracted a& to a.badge + + // Account for badges in navs + a.list-group-item.active > &, + .nav-pills > .active > a > & { + color: $badge-active-color; + background-color: $badge-active-bg; + } + .nav-pills > li > a > & { + margin-left: 3px; + } +} + +// Hover state, but only for links +a.badge { + &:hover, + &:focus { + color: $badge-link-hover-color; + text-decoration: none; + cursor: pointer; + } +} diff --git a/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_breadcrumbs.scss b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_breadcrumbs.scss new file mode 100644 index 00000000000..3641e333b8d --- /dev/null +++ b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_breadcrumbs.scss @@ -0,0 +1,26 @@ +// +// Breadcrumbs +// -------------------------------------------------- + + +.breadcrumb { + padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal; + margin-bottom: $line-height-computed; + list-style: none; + background-color: $breadcrumb-bg; + border-radius: $border-radius-base; + + > li { + display: inline-block; + + + li:before { + content: "#{$breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space + padding: 0 5px; + color: $breadcrumb-color; + } + } + + > .active { + color: $breadcrumb-active-color; + } +} diff --git a/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_button-groups.scss b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_button-groups.scss new file mode 100644 index 00000000000..63ccd927c80 --- /dev/null +++ b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_button-groups.scss @@ -0,0 +1,240 @@ +// +// Button groups +// -------------------------------------------------- + +// Make the div behave like a button +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; // match .btn alignment given font-size hack above + > .btn { + position: relative; + float: left; + // Bring the "active" button to the front + &:hover, + &:focus, + &:active, + &.active { + z-index: 2; + } + &:focus { + // Remove focus outline when dropdown JS adds it after closing the menu + outline: 0; + } + } +} + +// Prevent double borders when buttons are next to each other +.btn-group { + .btn + .btn, + .btn + .btn-group, + .btn-group + .btn, + .btn-group + .btn-group { + margin-left: -1px; + } +} + +// Optional: Group multiple button groups together for a toolbar +.btn-toolbar { + margin-left: -5px; // Offset the first child's margin + @include clearfix(); + + .btn-group, + .input-group { + float: left; + } + > .btn, + > .btn-group, + > .input-group { + margin-left: 5px; + } +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match +.btn-group > .btn:first-child { + margin-left: 0; + &:not(:last-child):not(.dropdown-toggle) { + @include border-right-radius(0); + } +} +// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + @include border-left-radius(0); +} + +// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group) +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child { + > .btn:last-child, + > .dropdown-toggle { + @include border-right-radius(0); + } +} +.btn-group > .btn-group:last-child > .btn:first-child { + @include border-left-radius(0); +} + +// On active and open, don't show outline +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + + +// Sizing +// +// Remix the default button sizing classes into new ones for easier manipulation. + +.btn-group-xs > .btn { @extend .btn-xs; } +.btn-group-sm > .btn { @extend .btn-sm; } +.btn-group-lg > .btn { @extend .btn-lg; } + + +// Split button dropdowns +// ---------------------- + +// Give the line between buttons some depth +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} + +// The clickable button for toggling the menu +// Remove the gradient and set the same inset shadow as the :active state +.btn-group.open .dropdown-toggle { + @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + + // Show no shadow for `.btn-link` since it has no other button styles. + &.btn-link { + @include box-shadow(none); + } +} + + +// Reposition the caret +.btn .caret { + margin-left: 0; +} +// Carets in other button sizes +.btn-lg .caret { + border-width: $caret-width-large $caret-width-large 0; + border-bottom-width: 0; +} +// Upside down carets for .dropup +.dropup .btn-lg .caret { + border-width: 0 $caret-width-large $caret-width-large; +} + + +// Vertical button groups +// ---------------------- + +.btn-group-vertical { + > .btn, + > .btn-group, + > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; + } + + // Clear floats so dropdown menus can be properly placed + > .btn-group { + @include clearfix(); + > .btn { + float: none; + } + } + + > .btn + .btn, + > .btn + .btn-group, + > .btn-group + .btn, + > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; + } +} + +.btn-group-vertical > .btn { + &:not(:first-child):not(:last-child) { + border-radius: 0; + } + &:first-child:not(:last-child) { + border-top-right-radius: $border-radius-base; + @include border-bottom-radius(0); + } + &:last-child:not(:first-child) { + border-bottom-left-radius: $border-radius-base; + @include border-top-radius(0); + } +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) { + > .btn:last-child, + > .dropdown-toggle { + @include border-bottom-radius(0); + } +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + @include border-top-radius(0); +} + + + +// Justified button groups +// ---------------------- + +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; + > .btn, + > .btn-group { + float: none; + display: table-cell; + width: 1%; + } + > .btn-group .btn { + width: 100%; + } + + > .btn-group .dropdown-menu { + left: auto; + } +} + + +// Checkbox and radio options +// +// In order to support the browser's form validation feedback, powered by the +// `required` attribute, we have to "hide" the inputs via `opacity`. We cannot +// use `display: none;` or `visibility: hidden;` as that also hides the popover. +// This way, we ensure a DOM element is visible to position the popover from. +// +// See https://github.com/twbs/bootstrap/pull/12794 for more. + +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { + position: absolute; + z-index: -1; + @include opacity(0); +} diff --git a/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_buttons.scss b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_buttons.scss new file mode 100644 index 00000000000..c3da8cdebb0 --- /dev/null +++ b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_buttons.scss @@ -0,0 +1,160 @@ +// +// Buttons +// -------------------------------------------------- + + +// Base styles +// -------------------------------------------------- + +.btn { + display: inline-block; + margin-bottom: 0; // For input.btn + font-weight: $btn-font-weight; + text-align: center; + vertical-align: middle; + cursor: pointer; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid transparent; + white-space: nowrap; + @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $border-radius-base); + @include user-select(none); + + @include button-variant($btn-default-color, $btn-default-bg, $btn-default-border); + + &, + &:active, + &.active { + &:focus { + @include tab-focus(); + } + } + + &:hover, + &:focus { + color: $btn-default-color; + text-decoration: none; + } + + &:active, + &.active { + outline: 0; + background-image: none; + font-weight: 900 !important; + @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + } + + &.disabled, + &[disabled], + fieldset[disabled] & { + cursor: not-allowed; + pointer-events: none; // Future-proof disabling of clicks + @include opacity(.65); + @include box-shadow(none); + } +} + + +// Alternate buttons +// -------------------------------------------------- + +.btn-default { + @include button-variant($btn-default-color, $btn-default-bg, $btn-default-border); +} +.btn-primary { + @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border); +} +// Success appears as green +.btn-success { + @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border); +} +// Info appears as blue-green +.btn-info { + @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border); +} +// Warning appears as orange +.btn-warning { + @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border); +} +// Danger and error appear as red +.btn-danger { + @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border); +} + + +// Link buttons +// ------------------------- + +// Make a button look and behave like a link +.btn-link { + color: $link-color; + font-weight: normal; + cursor: pointer; + border-radius: 0; + + &, + &:active, + &[disabled], + fieldset[disabled] & { + background-color: transparent; + @include box-shadow(none); + } + &, + &:hover, + &:focus, + &:active { + border-color: transparent; + } + &:hover, + &:focus { + color: $link-hover-color; + text-decoration: underline; + background-color: transparent; + } + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus { + color: $btn-link-disabled-color; + text-decoration: none; + } + } +} + + +// Button Sizes +// -------------------------------------------------- + +.btn-lg { + // line-height: ensure even-numbered height of button next to large input + @include button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $border-radius-large); +} +.btn-sm { + // line-height: ensure proper height of button next to small input + @include button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $border-radius-small); +} +.btn-xs { + @include button-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $line-height-small, $border-radius-small); +} + + +// Block button +// -------------------------------------------------- + +.btn-block { + display: block; + width: 100%; +} + +// Vertically space out multiple block buttons +.btn-block + .btn-block { + margin-top: 5px; +} + +// Specificity overrides +input[type="submit"], +input[type="reset"], +input[type="button"] { + &.btn-block { + width: 100%; + } +} diff --git a/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_carousel.scss b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_carousel.scss new file mode 100644 index 00000000000..e9e2f7ce1e1 --- /dev/null +++ b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_carousel.scss @@ -0,0 +1,243 @@ +// +// Carousel +// -------------------------------------------------- + + +// Wrapper for the slide container and indicators +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; + + > .item { + display: none; + position: relative; + @include transition(.6s ease-in-out left); + + // Account for jankitude on images + > img, + > a > img { + @include img-responsive(); + line-height: 1; + } + } + + > .active, + > .next, + > .prev { + display: block; + } + + > .active { + left: 0; + } + + > .next, + > .prev { + position: absolute; + top: 0; + width: 100%; + } + + > .next { + left: 100%; + } + > .prev { + left: -100%; + } + > .next.left, + > .prev.right { + left: 0; + } + + > .active.left { + left: -100%; + } + > .active.right { + left: 100%; + } + +} + +// Left/right controls for nav +// --------------------------- + +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: $carousel-control-width; + @include opacity($carousel-control-opacity); + font-size: $carousel-control-font-size; + color: $carousel-control-color; + text-align: center; + text-shadow: $carousel-text-shadow; + // We can't have this transition here because WebKit cancels the carousel + // animation if you trip this while in the middle of another animation. + + // Set gradients for backgrounds + &.left { + @include gradient-horizontal($start-color: rgba(0,0,0,.5), $end-color: rgba(0,0,0,.0001)); + } + &.right { + left: auto; + right: 0; + @include gradient-horizontal($start-color: rgba(0,0,0,.0001), $end-color: rgba(0,0,0,.5)); + } + + // Hover/focus state + &:hover, + &:focus { + outline: 0; + color: $carousel-control-color; + text-decoration: none; + @include opacity(.9); + } + + // Toggles + .icon-prev, + .icon-next, + .glyphicon-chevron-left, + .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + } + .icon-prev, + .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; + } + .icon-next, + .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; + } + .icon-prev, + .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + font-family: serif; + } + + + .icon-prev { + &:before { + content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) + } + } + .icon-next { + &:before { + content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A) + } + } +} + +// Optional indicator pips +// +// Add an unordered list with the following class and add a list item for each +// slide your carousel holds. + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; + + li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid $carousel-indicator-border-color; + border-radius: 10px; + cursor: pointer; + + // IE8-9 hack for event handling + // + // Internet Explorer 8-9 does not support clicks on elements without a set + // `background-color`. We cannot use `filter` since that's not viewed as a + // background color by the browser. Thus, a hack is needed. + // + // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we + // set alpha transparency for the best results possible. + background-color: #000 \9; // IE8 + background-color: rgba(0,0,0,0); // IE9 + } + .active { + margin: 0; + width: 12px; + height: 12px; + background-color: $carousel-indicator-active-bg; + } +} + +// Optional captions +// ----------------------------- +// Hidden by default for smaller viewports +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: $carousel-caption-color; + text-align: center; + text-shadow: $carousel-text-shadow; + & .btn { + text-shadow: none; // No shadow for button elements in carousel-caption + } +} + + +// Scale up controls for tablets and up +@media screen and (min-width: $screen-sm-min) { + + // Scale up the controls a smidge + .carousel-control { + .glyphicon-chevron-left, + .glyphicon-chevron-right, + .icon-prev, + .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .glyphicon-chevron-left, + .icon-prev { + margin-left: -15px; + } + .glyphicon-chevron-right, + .icon-next { + margin-right: -15px; + } + } + + // Show and left align the captions + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + + // Move up the indicators + .carousel-indicators { + bottom: 20px; + } +} diff --git a/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_close.scss b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_close.scss new file mode 100644 index 00000000000..62ce30fa374 --- /dev/null +++ b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_close.scss @@ -0,0 +1,35 @@ +// +// Close icons +// -------------------------------------------------- + + +.close { + float: right; + font-size: ($font-size-base * 1.5); + font-weight: $close-font-weight; + line-height: 1; + color: $close-color; + text-shadow: $close-text-shadow; + @include opacity(.2); + + &:hover, + &:focus { + color: $close-color; + text-decoration: none; + cursor: pointer; + @include opacity(.5); + } + + // [converter] extracted button& to button.close +} + +// Additional properties for button version +// iOS requires the button element instead of an anchor tag. +// If you want the anchor version, it requires `href="#"`. +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} diff --git a/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_code.scss b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_code.scss new file mode 100644 index 00000000000..3a434b946b1 --- /dev/null +++ b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_code.scss @@ -0,0 +1,68 @@ +// +// Code (inline and block) +// -------------------------------------------------- + + +// Inline and block code styles +code, +kbd, +pre, +samp { + font-family: $font-family-monospace; +} + +// Inline code +code { + padding: 2px 4px; + font-size: 90%; + color: $code-color; + background-color: $code-bg; + border-radius: $border-radius-base; +} + +// User input typically entered via keyboard +kbd { + padding: 2px 4px; + font-size: 90%; + color: $kbd-color; + background-color: $kbd-bg; + border-radius: $border-radius-small; + box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); + + kbd { + padding: 0; + font-size: 100%; + box-shadow: none; + } +} + +// Blocks of code +pre { + display: block; + padding: calc(($line-height-computed - 100%) / 2); + margin: 0 0 calc($line-height-computed / 2); + font-size: ($font-size-base - 1); // 14px to 13px + line-height: $line-height-base; + word-break: break-all; + word-wrap: break-word; + color: $pre-color; + background-color: $pre-bg; + border: 1px solid $pre-border-color; + border-radius: $border-radius-base; + + // Account for some code outputs that place code tags in pre tags + code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; + } +} + +// Enable scrollable blocks of code +.pre-scrollable { + max-height: $pre-scrollable-max-height; + overflow-y: scroll; +} diff --git a/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_component-animations.scss b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_component-animations.scss new file mode 100644 index 00000000000..8c3fd07a271 --- /dev/null +++ b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_component-animations.scss @@ -0,0 +1,35 @@ +// +// Component animations +// -------------------------------------------------- + +// Heads up! +// +// We don't use the `.opacity()` mixin here since it causes a bug with text +// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. + +.fade { + opacity: 0; + @include transition(opacity .15s linear); + &.in { + opacity: 1; + } +} + +.collapse { + display: none; + + &.in { display: block; } + // [converter] extracted tr&.in to tr.collapse.in + // [converter] extracted tbody&.in to tbody.collapse.in +} + +tr.collapse.in { display: table-row; } + +tbody.collapse.in { display: table-row-group; } + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + @include transition(height .35s ease); +} diff --git a/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_dropdowns.scss b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_dropdowns.scss new file mode 100644 index 00000000000..df50ec0cbc9 --- /dev/null +++ b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_dropdowns.scss @@ -0,0 +1,214 @@ +// +// Dropdown menus +// -------------------------------------------------- + + +// Dropdown arrow/caret +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: $caret-width-base solid; + border-right: $caret-width-base solid transparent; + border-left: $caret-width-base solid transparent; +} + +// The dropdown wrapper (div) +.dropdown { + position: relative; +} + +// Prevent the focus on the dropdown toggle when closing dropdowns +.dropdown-toggle:focus { + outline: 0; +} + +// The dropdown menu (ul) +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: $zindex-dropdown; + display: none; // none by default, but block on "open" of the menu + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; // override default ul + list-style: none; + font-size: $font-size-base; + text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) + background-color: $dropdown-bg; + border: 1px solid $dropdown-fallback-border; // IE8 fallback + border: 1px solid $dropdown-border; + border-radius: $border-radius-base; + @include box-shadow(0 6px 12px rgba(0,0,0,.175)); + background-clip: padding-box; + + // Aligns the dropdown menu to right + // + // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]` + &.pull-right { + right: 0; + left: auto; + } + + // Dividers (basically an hr) within the dropdown + .divider { + @include nav-divider($dropdown-divider-bg); + } + + // Links within the dropdown menu + > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: $line-height-base; + color: $dropdown-link-color; + white-space: nowrap; // prevent links from randomly breaking onto new lines + } +} + +// Hover/Focus state +.dropdown-menu > li > a { + &:hover, + &:focus { + text-decoration: none; + color: $dropdown-link-hover-color; + background-color: $dropdown-link-hover-bg; + } +} + +// Active state +.dropdown-menu > .active > a { + &, + &:hover, + &:focus { + color: $dropdown-link-active-color; + text-decoration: none; + outline: 0; + background-color: $dropdown-link-active-bg; + } +} + +// Disabled state +// +// Gray out text and ensure the hover/focus state remains gray + +.dropdown-menu > .disabled > a { + &, + &:hover, + &:focus { + color: $dropdown-link-disabled-color; + } +} +// Nuke hover/focus effects +.dropdown-menu > .disabled > a { + &:hover, + &:focus { + text-decoration: none; + background-color: transparent; + background-image: none; // Remove CSS gradient + @include reset-filter(); + cursor: not-allowed; + } +} + +// Open state for the dropdown +.open { + // Show the menu + > .dropdown-menu { + display: block; + } + + // Remove the outline when :focus is triggered + > a { + outline: 0; + } +} + +// Menu positioning +// +// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown +// menu with the parent. +.dropdown-menu-right { + left: auto; // Reset the default from `.dropdown-menu` + right: 0; +} +// With v3, we enabled auto-flipping if you have a dropdown within a right +// aligned nav component. To enable the undoing of that, we provide an override +// to restore the default dropdown menu alignment. +// +// This is only for left-aligning a dropdown menu within a `.navbar-right` or +// `.pull-right` nav component. +.dropdown-menu-left { + left: 0; + right: auto; +} + +// Dropdown section headers +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: $font-size-small; + line-height: $line-height-base; + color: $dropdown-header-color; + white-space: nowrap; // as with > li > a +} + +// Backdrop to catch body clicks on mobile, etc. +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: ($zindex-dropdown - 10); +} + +// Right aligned dropdowns +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +// Allow for dropdowns to go bottom up (aka, dropup-menu) +// +// Just add .dropup after the standard .dropdown class and you're set, bro. +// TODO: abstract this so that the navbar fixed styles are not placed here? + +.dropup, +.navbar-fixed-bottom .dropdown { + // Reverse the caret + .caret { + border-top: 0; + border-bottom: $caret-width-base solid; + content: ""; + } + // Different positioning for bottom up menu + .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; + } +} + + +// Component alignment +// +// Reiterate per navbar.less and the modified component alignment there. + +@media (min-width: $grid-float-breakpoint) { + .navbar-right { + .dropdown-menu { + right: 0; left: auto; + } + // Necessary for overrides of the default right aligned menu. + // Will remove come v4 in all likelihood. + .dropdown-menu-left { + left: 0; right: auto; + } + } +} diff --git a/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_forms.scss b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_forms.scss new file mode 100644 index 00000000000..4da69c06fdf --- /dev/null +++ b/src/opnsense/www/themes/opnsense-dark/assets/stylesheets/bootstrap/_forms.scss @@ -0,0 +1,540 @@ +// +// Forms +// -------------------------------------------------- + + +// Normalize non-controls +// +// Restyle and baseline non-control form elements. + +fieldset { + padding: 0; + margin: 0; + border: 0; + // Chrome and Firefox set a min-width: min-content; on fieldsets, + // so we reset that to ensure it behaves more like a standard block element. + // See https://github.com/twbs/bootstrap/issues/12359. + min-width: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: $line-height-computed; + font-size: ($font-size-base * 1.5); + line-height: inherit; + color: $legend-color; + border: 0; + border-bottom: 1px solid $legend-border-color; +} + +label { + display: inline-block; + max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141) + margin-bottom: 5px; + font-weight: normal; +} + + +// Normalize form controls +// +// While most of our form styles require extra classes, some basic normalization +// is required to ensure optimum display with or without those classes to better +// address browser inconsistencies. + +// Override content-box in Normalize (isn't specific enough) +input[type="search"] { + @include box-sizing(border-box); +} + +// Position radios and checkboxes better +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; // IE8-9 + line-height: normal; +} + +// Set the height of file controls to match text inputs +input[type="file"] { + display: block; +} + +// Make range inputs behave like textual form controls +input[type="range"] { + display: block; + width: 100%; +} + +// Make multiple select elements height not fixed +select[multiple], +select[size] { + height: auto; +} + +// Focus for file, radio, and checkbox +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + @include tab-focus(); +} + +// Adjust output element +output { + display: block; + padding-top: ($padding-base-vertical + 1); + font-size: $font-size-base; + line-height: $line-height-base; + color: $input-color; +} + + +// Common form controls +// +// Shared size and type resets for form controls. Apply `.form-control` to any +// of the following form controls: +// +select, +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"] +/* .form-control */ +{ + display: block; + width: 100%; + height: $input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border) + padding: $padding-base-vertical $padding-base-horizontal; + font-size: $font-size-base; + line-height: $line-height-base; + color: $input-color; + background-color: $input-bg; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid $input-border; + border-radius: $input-border-radius; + text-overflow: ellipsis; + max-width:348px; + //@include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); + @include transition(border-color ease-in-out .1s, box-shadow ease-in-out .1s); + + // Customize the `:focus` state to imitate native WebKit styles. + @include form-control-focus(); + + // Placeholder + @include placeholder(); + + // Disabled and read-only inputs + // + // HTML5 says that controls under a fieldset > legend:first-child won't be + // disabled if the fieldset is disabled. Due to implementation difficulty, we + // dont honor that edge case; we style them as disabled anyway. + &[disabled], + &[readonly], + fieldset[disabled] & { + cursor: not-allowed; + background-color: $input-bg-disabled; + opacity: 1; // iOS fix for unreadable disabled content + } + + // [converter] extracted textarea& to textarea.form-control +} + +// Reset height for `textarea`s +textarea{ + height: auto; +} + + +// Search inputs in iOS +// +// This overrides the extra rounded corners on search inputs in iOS so that our +// `.form-control` class can properly style them. Note that this cannot simply +// be added to `.form-control` as its not specific enough. For details, see +// https://github.com/twbs/bootstrap/issues/11586. + +input[type="search"] { + -webkit-appearance: none; +} + + +// Special styles for iOS temporal inputs +// +// In Mobile Safari, setting `display: block` on temporal inputs causes the +// text within the input to become vertically misaligned. +// As a workaround, we set a pixel line-height that matches the +// given height of the input. Since this fucks up everything else, we have to +// appropriately reset it for Internet Explorer and the size variations. + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + line-height: $input-height-base; + // IE8+ misaligns the text within date inputs, so we reset + line-height: $line-height-base #{\0}; + + &.input-sm { + line-height: $input-height-small; + } + &.input-lg { + line-height: $input-height-large; + } +} + + +// Form groups +// +// Designed to help with the organization and spacing of vertical forms. For +// horizontal forms, use the predefined grid classes. + +.form-group { + margin-bottom: 15px; +} + + +// Checkboxes and radios +// +// Indent the labels to position radios/checkboxes as hanging controls. + +.radio, +.checkbox { + position: relative; + display: block; + min-height: $line-height-computed; // clear the floating input if there is no label text + margin-top: 10px; + margin-bottom: 10px; + + label { + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; + } +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} + +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing +} + +// Radios and checkboxes on same line +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; // space out consecutive inline controls +} + +// Apply same disabled cursor tweak as for inputs +// Some special care is needed because