diff --git a/static/admin/css/.DS_Store b/static/admin/css/.DS_Store new file mode 100644 index 0000000..e9610e9 Binary files /dev/null and b/static/admin/css/.DS_Store differ diff --git a/static/admin/css/maps/style.css.map b/static/admin/css/maps/style.css.map new file mode 100644 index 0000000..01a1a38 --- /dev/null +++ b/static/admin/css/maps/style.css.map @@ -0,0 +1 @@ +{"version":3,"file":"../style.css","sources":["style.scss","../node_modules/bootstrap/scss/_functions.scss","../node_modules/bootstrap/scss/_variables.scss","_variables.scss","../node_modules/compass-mixins/lib/_compass.scss","../node_modules/compass-mixins/lib/compass/_functions.scss","../node_modules/compass-mixins/lib/compass/functions/_lists.scss","../node_modules/compass-mixins/lib/compass/functions/_cross_browser_support.scss","../node_modules/compass-mixins/lib/compass/functions/_gradient_support.scss","../node_modules/compass-mixins/lib/compass/functions/_constants.scss","../node_modules/compass-mixins/lib/compass/functions/_display.scss","../node_modules/compass-mixins/lib/compass/functions/_colors.scss","../node_modules/compass-mixins/lib/compass/_utilities.scss","../node_modules/compass-mixins/lib/compass/utilities/_color.scss","../node_modules/compass-mixins/lib/compass/utilities/color/_contrast.scss","../node_modules/compass-mixins/lib/compass/utilities/_general.scss","../node_modules/compass-mixins/lib/compass/utilities/general/_reset.scss","../node_modules/compass-mixins/lib/compass/reset/_utilities.scss","../node_modules/compass-mixins/lib/compass/utilities/general/_clearfix.scss","../node_modules/compass-mixins/lib/compass/utilities/general/_hacks.scss","../node_modules/compass-mixins/lib/compass/_support.scss","../node_modules/compass-mixins/lib/compass/utilities/general/_float.scss","../node_modules/compass-mixins/lib/compass/utilities/general/_tag-cloud.scss","../node_modules/compass-mixins/lib/compass/utilities/general/_min.scss","../node_modules/compass-mixins/lib/compass/utilities/_sprites.scss","../node_modules/compass-mixins/lib/compass/utilities/sprites/_base.scss","../node_modules/compass-mixins/lib/compass/utilities/sprites/_sprite-img.scss","../node_modules/compass-mixins/lib/compass/utilities/_tables.scss","../node_modules/compass-mixins/lib/compass/utilities/tables/_alternating-rows-and-columns.scss","../node_modules/compass-mixins/lib/compass/utilities/tables/_borders.scss","../node_modules/compass-mixins/lib/compass/utilities/tables/_scaffolding.scss","../node_modules/compass-mixins/lib/compass/typography/_links.scss","../node_modules/compass-mixins/lib/compass/typography/links/_hover-link.scss","../node_modules/compass-mixins/lib/compass/typography/links/_link-colors.scss","../node_modules/compass-mixins/lib/compass/typography/links/_unstyled-link.scss","../node_modules/compass-mixins/lib/compass/typography/_lists.scss","../node_modules/compass-mixins/lib/compass/typography/lists/_horizontal-list.scss","../node_modules/compass-mixins/lib/compass/typography/lists/_bullets.scss","../node_modules/compass-mixins/lib/compass/typography/lists/_inline-list.scss","../node_modules/compass-mixins/lib/compass/typography/lists/_inline-block-list.scss","../node_modules/compass-mixins/lib/compass/css3/_inline-block.scss","../node_modules/compass-mixins/lib/compass/css3/_shared.scss","../node_modules/compass-mixins/lib/compass/typography/_text.scss","../node_modules/compass-mixins/lib/compass/typography/text/_ellipsis.scss","../node_modules/compass-mixins/lib/compass/typography/text/_nowrap.scss","../node_modules/compass-mixins/lib/compass/typography/text/_replacement.scss","../node_modules/compass-mixins/lib/compass/typography/text/_force-wrap.scss","../node_modules/compass-mixins/lib/compass/_typography.scss","../node_modules/compass-mixins/lib/compass/typography/_vertical_rhythm.scss","../node_modules/compass-mixins/lib/compass/layout/_grid-background.scss","../node_modules/compass-mixins/lib/compass/css3/_images.scss","../node_modules/compass-mixins/lib/compass/css3/_background-size.scss","../node_modules/compass-mixins/lib/compass/_css3.scss","../node_modules/compass-mixins/lib/compass/css3/_border-radius.scss","../node_modules/compass-mixins/lib/compass/css3/_opacity.scss","../node_modules/compass-mixins/lib/compass/css3/_box-shadow.scss","../node_modules/compass-mixins/lib/compass/css3/_text-shadow.scss","../node_modules/compass-mixins/lib/compass/css3/_columns.scss","../node_modules/compass-mixins/lib/compass/css3/_box-sizing.scss","../node_modules/compass-mixins/lib/compass/css3/_box.scss","../node_modules/compass-mixins/lib/compass/css3/_background-clip.scss","../node_modules/compass-mixins/lib/compass/css3/_background-origin.scss","../node_modules/compass-mixins/lib/compass/css3/_font-face.scss","../node_modules/compass-mixins/lib/compass/css3/_transform.scss","../node_modules/compass-mixins/lib/compass/css3/_transition.scss","../node_modules/compass-mixins/lib/compass/css3/_appearance.scss","../node_modules/compass-mixins/lib/compass/css3/_regions.scss","../node_modules/compass-mixins/lib/compass/css3/_hyphenation.scss","../node_modules/compass-mixins/lib/compass/css3/_filter.scss","../node_modules/compass-mixins/lib/compass/css3/_pie.scss","../node_modules/compass-mixins/lib/compass/css3/_user-interface.scss","../node_modules/compass-mixins/lib/compass/css3/_flexbox.scss","../node_modules/compass-mixins/lib/_animate.scss","../node_modules/compass-mixins/lib/animation/_core.scss","../node_modules/compass-mixins/lib/animation/_shared.scss","../node_modules/compass-mixins/lib/animation/_animate.scss","../node_modules/compass-mixins/lib/animation/animate/_attention-seekers.scss","../node_modules/compass-mixins/lib/animation/animate/_bouncing.scss","../node_modules/compass-mixins/lib/animation/animate/bouncing/_bouncing-exits.scss","../node_modules/compass-mixins/lib/animation/animate/bouncing/_bouncing-entrances.scss","../node_modules/compass-mixins/lib/animation/animate/_fading.scss","../node_modules/compass-mixins/lib/animation/animate/fading/_fading-exits.scss","../node_modules/compass-mixins/lib/animation/animate/fading/_fading-entrances.scss","../node_modules/compass-mixins/lib/animation/animate/_flippers.scss","../node_modules/compass-mixins/lib/animation/animate/_lightspeed.scss","../node_modules/compass-mixins/lib/animation/animate/_rotating.scss","../node_modules/compass-mixins/lib/animation/animate/rotating/_rotating-exits.scss","../node_modules/compass-mixins/lib/animation/animate/rotating/_rotating-entrances.scss","../node_modules/compass-mixins/lib/animation/animate/_specials.scss","../node_modules/bootstrap/scss/bootstrap.scss","../node_modules/bootstrap/scss/_mixins.scss","../node_modules/bootstrap/scss/vendor/_rfs.scss","../node_modules/bootstrap/scss/mixins/_deprecate.scss","../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../node_modules/bootstrap/scss/mixins/_color-scheme.scss","../node_modules/bootstrap/scss/mixins/_image.scss","../node_modules/bootstrap/scss/mixins/_resize.scss","../node_modules/bootstrap/scss/mixins/_visually-hidden.scss","../node_modules/bootstrap/scss/mixins/_reset-text.scss","../node_modules/bootstrap/scss/mixins/_text-truncate.scss","../node_modules/bootstrap/scss/mixins/_utilities.scss","../node_modules/bootstrap/scss/mixins/_alert.scss","../node_modules/bootstrap/scss/mixins/_backdrop.scss","../node_modules/bootstrap/scss/mixins/_buttons.scss","../node_modules/bootstrap/scss/mixins/_caret.scss","../node_modules/bootstrap/scss/mixins/_pagination.scss","../node_modules/bootstrap/scss/mixins/_lists.scss","../node_modules/bootstrap/scss/mixins/_list-group.scss","../node_modules/bootstrap/scss/mixins/_forms.scss","../node_modules/bootstrap/scss/mixins/_table-variants.scss","../node_modules/bootstrap/scss/mixins/_border-radius.scss","../node_modules/bootstrap/scss/mixins/_box-shadow.scss","../node_modules/bootstrap/scss/mixins/_gradients.scss","../node_modules/bootstrap/scss/mixins/_transition.scss","../node_modules/bootstrap/scss/mixins/_clearfix.scss","../node_modules/bootstrap/scss/mixins/_container.scss","../node_modules/bootstrap/scss/mixins/_grid.scss","../node_modules/bootstrap/scss/_utilities.scss","../node_modules/bootstrap/scss/_root.scss","../node_modules/bootstrap/scss/_reboot.scss","../node_modules/bootstrap/scss/_type.scss","../node_modules/bootstrap/scss/_images.scss","../node_modules/bootstrap/scss/_containers.scss","../node_modules/bootstrap/scss/_grid.scss","../node_modules/bootstrap/scss/_tables.scss","../node_modules/bootstrap/scss/_forms.scss","../node_modules/bootstrap/scss/forms/_labels.scss","../node_modules/bootstrap/scss/forms/_form-text.scss","../node_modules/bootstrap/scss/forms/_form-control.scss","../node_modules/bootstrap/scss/forms/_form-select.scss","../node_modules/bootstrap/scss/forms/_form-check.scss","../node_modules/bootstrap/scss/forms/_form-range.scss","../node_modules/bootstrap/scss/forms/_floating-labels.scss","../node_modules/bootstrap/scss/forms/_input-group.scss","../node_modules/bootstrap/scss/forms/_validation.scss","../node_modules/bootstrap/scss/_buttons.scss","../node_modules/bootstrap/scss/_transitions.scss","../node_modules/bootstrap/scss/_dropdown.scss","../node_modules/bootstrap/scss/_button-group.scss","../node_modules/bootstrap/scss/_nav.scss","../node_modules/bootstrap/scss/_navbar.scss","../node_modules/bootstrap/scss/_card.scss","../node_modules/bootstrap/scss/_accordion.scss","../node_modules/bootstrap/scss/_breadcrumb.scss","../node_modules/bootstrap/scss/_pagination.scss","../node_modules/bootstrap/scss/_badge.scss","../node_modules/bootstrap/scss/_alert.scss","../node_modules/bootstrap/scss/_progress.scss","../node_modules/bootstrap/scss/_list-group.scss","../node_modules/bootstrap/scss/_close.scss","../node_modules/bootstrap/scss/_toasts.scss","../node_modules/bootstrap/scss/_modal.scss","../node_modules/bootstrap/scss/_tooltip.scss","../node_modules/bootstrap/scss/_popover.scss","../node_modules/bootstrap/scss/_carousel.scss","../node_modules/bootstrap/scss/_spinners.scss","../node_modules/bootstrap/scss/_offcanvas.scss","../node_modules/bootstrap/scss/_placeholders.scss","../node_modules/bootstrap/scss/_helpers.scss","../node_modules/bootstrap/scss/helpers/_clearfix.scss","../node_modules/bootstrap/scss/helpers/_colored-links.scss","../node_modules/bootstrap/scss/helpers/_ratio.scss","../node_modules/bootstrap/scss/helpers/_position.scss","../node_modules/bootstrap/scss/helpers/_stacks.scss","../node_modules/bootstrap/scss/helpers/_visually-hidden.scss","../node_modules/bootstrap/scss/helpers/_stretched-link.scss","../node_modules/bootstrap/scss/helpers/_text-truncation.scss","../node_modules/bootstrap/scss/helpers/_vr.scss","../node_modules/bootstrap/scss/utilities/_api.scss","mixins/_misc.scss","mixins/_badges.scss","mixins/_animation.scss","mixins/_blockqoute.scss","mixins/_buttons.scss","mixins/_cards.scss","_reset.scss","_fonts.scss","_functions.scss","_background.scss","_typography.scss","_misc.scss","_footer.scss","_utilities.scss","_demo.scss","components/_buttons.scss","components/_badges.scss","components/_bootstrap-progress.scss","components/_cards.scss","components/_checkbox-radio.scss","components/_dropdown.scss","components/_forms.scss","components/_icons.scss","components/_lists.scss","components/_tables.scss","components/_todo-list.scss","landing-screens/_auth.scss","_vertical-wrapper.scss","_sidebar.scss","_navbar.scss","_layouts.scss"],"sourcesContent":["/*------------------------------------------------------------------\n [Master Stylesheet]\n\n Project:\tRoyalUI Admin\n Version:\t1.0.0\n-------------------------------------------------------------------*/\n\n\n\n/*-------------------------------------------------------------------\n ===== Table of Contents =====\n\n * Bootstrap functions\n * Bootstrap variables\n * Template variables\n * SCSS Compass Functions\n * Boostrap Main SCSS\n * Template mixins\n + Animation Mixins\n + Button Mixins\n + Miscellaneous Mixins\n + Cards Mixins\n + Color Functions Mixins\n + Badge Mixins\n + Blockquote Mixins\n \n * Core Styles\n + Reset Styles\n + Fonts\n + Functions\n + Backgrounds\n + Typography\n + Miscellaneous\n + Footer\n + Utilities\n + Demo styles\n * Components\n + Buttons\n + Badges\n + Bootstrap Progress\n + Cards\n + Checkboxes and Radios\n + Dropdowns\n + Forms\n + Icons\n + Lists\n + Tables\n + To-do List\n * Landing screens\n + Auth\n * Layout\n + Vertical wrapper\n + Sidebar\n + Navbar\n + Layouts\n\n-------------------------------------------------------------------*/\n\n\n/*-------------------------------------------------------------------*/\n/* === Import Bootstrap functions and variables === */\n@import \"../node_modules/bootstrap/scss/functions\";\n@import \"../node_modules/bootstrap/scss/variables\";\n\n/*-------------------------------------------------------------------*/\n/* === Import template variables === */\n@import \"variables\";\n\n/*-------------------------------------------------------------------*/\n/* === SCSS Compass Functions === */\n@import \"../node_modules/compass-mixins/lib/compass\";\n@import \"../node_modules/compass-mixins/lib/animate\";\n\n/*-------------------------------------------------------------------*/\n/* === Boostrap Main SCSS === */\n@import \"../node_modules/bootstrap/scss/bootstrap\";\n\n/*-------------------------------------------------------------------*/\n/* === Template mixins === */\n@import \"mixins/misc\";\n@import \"mixins/badges\";\n@import \"mixins/animation\";\n@import \"mixins/blockqoute\";\n@import \"mixins/buttons\";\n@import \"mixins/cards\";\n\n/*-------------------------------------------------------------------*/\n/* === Core Styles === */\n@import \"reset\";\n@import \"fonts\";\n@import \"functions\";\n@import \"background\";\n@import \"typography\";\n@import \"misc\";\n@import \"footer\";\n@import \"utilities\";\n@import \"demo\";\n\n/*-------------------------------------------------------------------*/\n/* === Components === */\n@import \"components/buttons\";\n@import \"components/badges\";\n@import \"components/bootstrap-progress\";\n@import \"components/cards\";\n@import \"components/checkbox-radio\";\n@import \"components/dropdown\";\n@import \"components/forms\";\n@import \"components/icons\";\n@import \"components/lists\";\n@import \"components/tables\";\n@import \"components/todo-list\";\n\n/*-------------------------------------------------------------------*/\n/* === Landing screens === */\n@import \"landing-screens/auth\";\n\n\n@import \"vertical-wrapper\";\n@import \"sidebar\";\n@import \"navbar\";\n@import \"layouts\";","// Bootstrap functions\n//\n// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.\n\n// Ascending\n// Used to evaluate Sass maps like our grid breakpoints.\n@mixin _assert-ascending($map, $map-name) {\n $prev-key: null;\n $prev-num: null;\n @each $key, $num in $map {\n @if $prev-num == null or unit($num) == \"%\" or unit($prev-num) == \"%\" {\n // Do nothing\n } @else if not comparable($prev-num, $num) {\n @warn \"Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n } @else if $prev-num >= $num {\n @warn \"Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n }\n $prev-key: $key;\n $prev-num: $num;\n }\n}\n\n// Starts at zero\n// Used to ensure the min-width of the lowest breakpoint starts at 0.\n@mixin _assert-starts-at-zero($map, $map-name: \"$grid-breakpoints\") {\n @if length($map) > 0 {\n $values: map-values($map);\n $first-value: nth($values, 1);\n @if $first-value != 0 {\n @warn \"First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.\";\n }\n }\n}\n\n// Colors\n@function to-rgb($value) {\n @return red($value), green($value), blue($value);\n}\n\n// stylelint-disable scss/dollar-variable-pattern\n@function rgba-css-var($identifier, $target) {\n @if $identifier == \"body\" and $target == \"bg\" {\n @return rgba(var(--#{$variable-prefix}#{$identifier}-bg-rgb), var(--#{$variable-prefix}#{$target}-opacity));\n } @if $identifier == \"body\" and $target == \"text\" {\n @return rgba(var(--#{$variable-prefix}#{$identifier}-color-rgb), var(--#{$variable-prefix}#{$target}-opacity));\n } @else {\n @return rgba(var(--#{$variable-prefix}#{$identifier}-rgb), var(--#{$variable-prefix}#{$target}-opacity));\n }\n}\n\n@function map-loop($map, $func, $args...) {\n $_map: ();\n\n @each $key, $value in $map {\n // allow to pass the $key and $value of the map as an function argument\n $_args: ();\n @each $arg in $args {\n $_args: append($_args, if($arg == \"$key\", $key, if($arg == \"$value\", $value, $arg)));\n }\n\n $_map: map-merge($_map, ($key: call(get-function($func), $_args...)));\n }\n\n @return $_map;\n}\n// stylelint-enable scss/dollar-variable-pattern\n\n@function varify($list) {\n $result: null;\n @each $entry in $list {\n $result: append($result, var(--#{$variable-prefix}#{$entry}), space);\n }\n @return $result;\n}\n\n// Internal Bootstrap function to turn maps into its negative variant.\n// It prefixes the keys with `n` and makes the value negative.\n@function negativify-map($map) {\n $result: ();\n @each $key, $value in $map {\n @if $key != 0 {\n $result: map-merge($result, (\"n\" + $key: (-$value)));\n }\n }\n @return $result;\n}\n\n// Get multiple keys from a sass map\n@function map-get-multiple($map, $values) {\n $result: ();\n @each $key, $value in $map {\n @if (index($values, $key) != null) {\n $result: map-merge($result, ($key: $value));\n }\n }\n @return $result;\n}\n\n// Merge multiple maps\n@function map-merge-multiple($maps...) {\n $merged-maps: ();\n\n @each $map in $maps {\n $merged-maps: map-merge($merged-maps, $map);\n }\n @return $merged-maps;\n}\n\n// Replace `$search` with `$replace` in `$string`\n// Used on our SVG icon backgrounds for custom forms.\n//\n// @author Hugo Giraudel\n// @param {String} $string - Initial string\n// @param {String} $search - Substring to replace\n// @param {String} $replace ('') - New value\n// @return {String} - Updated string\n@function str-replace($string, $search, $replace: \"\") {\n $index: str-index($string, $search);\n\n @if $index {\n @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n }\n\n @return $string;\n}\n\n// See https://codepen.io/kevinweber/pen/dXWoRw\n//\n// Requires the use of quotes around data URIs.\n\n@function escape-svg($string) {\n @if str-index($string, \"data:image/svg+xml\") {\n @each $char, $encoded in $escaped-characters {\n // Do not escape the url brackets\n @if str-index($string, \"url(\") == 1 {\n $string: url(\"#{str-replace(str-slice($string, 6, -3), $char, $encoded)}\");\n } @else {\n $string: str-replace($string, $char, $encoded);\n }\n }\n }\n\n @return $string;\n}\n\n// Color contrast\n// See https://github.com/twbs/bootstrap/pull/30168\n\n// A list of pre-calculated numbers of pow(divide((divide($value, 255) + .055), 1.055), 2.4). (from 0 to 255)\n// stylelint-disable-next-line scss/dollar-variable-default, scss/dollar-variable-pattern\n$_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003 .0033 .0037 .004 .0044 .0048 .0052 .0056 .006 .0065 .007 .0075 .008 .0086 .0091 .0097 .0103 .011 .0116 .0123 .013 .0137 .0144 .0152 .016 .0168 .0176 .0185 .0194 .0203 .0212 .0222 .0232 .0242 .0252 .0262 .0273 .0284 .0296 .0307 .0319 .0331 .0343 .0356 .0369 .0382 .0395 .0409 .0423 .0437 .0452 .0467 .0482 .0497 .0513 .0529 .0545 .0561 .0578 .0595 .0612 .063 .0648 .0666 .0685 .0704 .0723 .0742 .0762 .0782 .0802 .0823 .0844 .0865 .0887 .0908 .0931 .0953 .0976 .0999 .1022 .1046 .107 .1095 .1119 .1144 .117 .1195 .1221 .1248 .1274 .1301 .1329 .1356 .1384 .1413 .1441 .147 .15 .1529 .1559 .159 .162 .1651 .1683 .1714 .1746 .1779 .1812 .1845 .1878 .1912 .1946 .1981 .2016 .2051 .2086 .2122 .2159 .2195 .2232 .227 .2307 .2346 .2384 .2423 .2462 .2502 .2542 .2582 .2623 .2664 .2705 .2747 .2789 .2831 .2874 .2918 .2961 .3005 .305 .3095 .314 .3185 .3231 .3278 .3325 .3372 .3419 .3467 .3515 .3564 .3613 .3663 .3712 .3763 .3813 .3864 .3916 .3968 .402 .4072 .4125 .4179 .4233 .4287 .4342 .4397 .4452 .4508 .4564 .4621 .4678 .4735 .4793 .4851 .491 .4969 .5029 .5089 .5149 .521 .5271 .5333 .5395 .5457 .552 .5583 .5647 .5711 .5776 .5841 .5906 .5972 .6038 .6105 .6172 .624 .6308 .6376 .6445 .6514 .6584 .6654 .6724 .6795 .6867 .6939 .7011 .7084 .7157 .7231 .7305 .7379 .7454 .7529 .7605 .7682 .7758 .7835 .7913 .7991 .807 .8148 .8228 .8308 .8388 .8469 .855 .8632 .8714 .8796 .8879 .8963 .9047 .9131 .9216 .9301 .9387 .9473 .956 .9647 .9734 .9823 .9911 1;\n\n@function color-contrast($background, $color-contrast-dark: $color-contrast-dark, $color-contrast-light: $color-contrast-light, $min-contrast-ratio: $min-contrast-ratio) {\n $foregrounds: $color-contrast-light, $color-contrast-dark, $white, $black;\n $max-ratio: 0;\n $max-ratio-color: null;\n\n @each $color in $foregrounds {\n $contrast-ratio: contrast-ratio($background, $color);\n @if $contrast-ratio > $min-contrast-ratio {\n @return $color;\n } @else if $contrast-ratio > $max-ratio {\n $max-ratio: $contrast-ratio;\n $max-ratio-color: $color;\n }\n }\n\n @warn \"Found no color leading to #{$min-contrast-ratio}:1 contrast ratio against #{$background}...\";\n\n @return $max-ratio-color;\n}\n\n@function contrast-ratio($background, $foreground: $color-contrast-light) {\n $l1: luminance($background);\n $l2: luminance(opaque($background, $foreground));\n\n @return if($l1 > $l2, divide($l1 + .05, $l2 + .05), divide($l2 + .05, $l1 + .05));\n}\n\n// Return WCAG2.0 relative luminance\n// See https://www.w3.org/WAI/GL/wiki/Relative_luminance\n// See https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n@function luminance($color) {\n $rgb: (\n \"r\": red($color),\n \"g\": green($color),\n \"b\": blue($color)\n );\n\n @each $name, $value in $rgb {\n $value: if(divide($value, 255) < .03928, divide(divide($value, 255), 12.92), nth($_luminance-list, $value + 1));\n $rgb: map-merge($rgb, ($name: $value));\n }\n\n @return (map-get($rgb, \"r\") * .2126) + (map-get($rgb, \"g\") * .7152) + (map-get($rgb, \"b\") * .0722);\n}\n\n// Return opaque color\n// opaque(#fff, rgba(0, 0, 0, .5)) => #808080\n@function opaque($background, $foreground) {\n @return mix(rgba($foreground, 1), $background, opacity($foreground) * 100);\n}\n\n// scss-docs-start color-functions\n// Tint a color: mix a color with white\n@function tint-color($color, $weight) {\n @return mix(white, $color, $weight);\n}\n\n// Shade a color: mix a color with black\n@function shade-color($color, $weight) {\n @return mix(black, $color, $weight);\n}\n\n// Shade the color if the weight is positive, else tint it\n@function shift-color($color, $weight) {\n @return if($weight > 0, shade-color($color, $weight), tint-color($color, -$weight));\n}\n// scss-docs-end color-functions\n\n// Return valid calc\n@function add($value1, $value2, $return-calc: true) {\n @if $value1 == null {\n @return $value2;\n }\n\n @if $value2 == null {\n @return $value1;\n }\n\n @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n @return $value1 + $value2;\n }\n\n @return if($return-calc == true, calc(#{$value1} + #{$value2}), $value1 + unquote(\" + \") + $value2);\n}\n\n@function subtract($value1, $value2, $return-calc: true) {\n @if $value1 == null and $value2 == null {\n @return null;\n }\n\n @if $value1 == null {\n @return -$value2;\n }\n\n @if $value2 == null {\n @return $value1;\n }\n\n @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n @return $value1 - $value2;\n }\n\n @if type-of($value2) != number {\n $value2: unquote(\"(\") + $value2 + unquote(\")\");\n }\n\n @return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + unquote(\" - \") + $value2);\n}\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n// scss-docs-start theme-colors-rgb\n$theme-colors-rgb: map-loop($theme-colors, to-rgb, \"$value\") !default;\n// scss-docs-end theme-colors-rgb\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-200,\n \"purple-200\": $purple-100,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n\n$negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n$body-text-align: null !default;\n\n// Utilities maps\n//\n// Extends the default `$theme-colors` maps to help create our utilities.\n\n// Come v6, we'll de-dupe these variables. Until then, for backward compatibility, we keep them to reassign.\n// scss-docs-start utilities-colors\n$utilities-colors: $theme-colors-rgb !default;\n// scss-docs-end utilities-colors\n\n// scss-docs-start utilities-text-colors\n$utilities-text: map-merge(\n $utilities-colors,\n (\n \"black\": to-rgb($black),\n \"white\": to-rgb($white),\n \"body\": to-rgb($body-color)\n )\n) !default;\n$utilities-text-colors: map-loop($utilities-text, rgba-css-var, \"$key\", \"text\") !default;\n// scss-docs-end utilities-text-colors\n\n// scss-docs-start utilities-bg-colors\n$utilities-bg: map-merge(\n $utilities-colors,\n (\n \"black\": to-rgb($black),\n \"white\": to-rgb($white),\n \"body\": to-rgb($body-bg)\n )\n) !default;\n$utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, \"$key\", \"bg\") !default;\n// scss-docs-end utilities-bg-colors\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n$gutters: $spacers !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width * .5 !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n\n$border-color: $gray-300 !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .25rem !default;\n$border-radius-sm: .2rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$variable-prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$variable-prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: $gray-600 !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n$hr-height: $border-width !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: $body-color !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-striped-order: odd !default;\n\n$table-group-separator-color: currentColor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: $border-width !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: $link-color !default;\n$btn-link-hover-color: $link-hover-color !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: $body-bg !default;\n$input-disabled-bg: $gray-200 !default;\n$input-disabled-border-color: null !default;\n\n$input-color: $body-color !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: 1px solid rgba($black, .25) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $gray-200 !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: $gray-300 !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: $gray-500 !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: $input-group-addon-bg !default;\n$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n// scss-docs-end zindex-stack\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: $link-color !default;\n$nav-link-hover-color: $link-hover-color !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-theme-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .55) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-theme-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: shade-color($dropdown-link-color, 10%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default;\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-radius: $border-radius !default;\n$pagination-margin-start: -$pagination-border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-color: $link-hover-color !default;\n$pagination-focus-bg: $gray-200 !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-border-width: $border-width !default;\n$card-border-color: rgba($black, .125) !default;\n$card-border-radius: $border-radius !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: $body-color !default;\n$accordion-bg: $body-bg !default;\n$accordion-border-width: $border-width !default;\n$accordion-border-color: rgba($black, .125) !default;\n$accordion-border-radius: $border-radius !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: $accordion-color !default;\n$accordion-button-bg: $accordion-bg !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: tint-color($component-active-bg, 90%) !default;\n$accordion-button-active-color: shade-color($primary, 10%) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $accordion-button-color !default;\n$accordion-icon-active-color: $accordion-button-active-color !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-bg: shade-color($popover-bg, 6%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n// scss-docs-end popover-variables\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba($black, .1) !default;\n$toast-border-radius: $border-radius !default;\n$toast-box-shadow: $box-shadow !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba($black, .05) !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: $box-shadow-inset !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: $gray-900 !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n$list-group-item-bg-scale: -80% !default;\n$list-group-item-color-scale: 40% !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: $box-shadow-sm !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: $gray-600 !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: $modal-content-bg !default;\n$offcanvas-color: $modal-content-color !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: null !default;\n","\n////////// COLOR SYSTEM //////////\n\n$blue: #5E50F9;\n$indigo: #6610f2;\n$purple: #6a008a;\n$pink: #E91E63;\n$red: #f96868;\n$orange: #f2a654;\n$yellow: #f6e84e;\n$green: #46c35f;\n$teal: #58d8a3;\n$cyan: #57c7d4;\n$black: #000;\n$white: #ffffff;\n$white-smoke: #f2f7f8;\n$violet: #41478a;\n$darkslategray : #2e383e;\n$dodger-blue : #3498db;\n\n\n$colors: (\n blue: $blue,\n indigo: $indigo,\n purple: $purple,\n pink: $pink,\n red: $red,\n orange: $orange,\n yellow: $yellow,\n green: $green,\n teal: $teal,\n cyan: $cyan,\n white: $white,\n gray: #434a54,\n gray-light: #aab2bd,\n gray-lighter: #e8eff4,\n gray-lightest: #e6e9ed,\n gray-dark: #0f1531,\n black: #000000\n);\n\n$blue: $blue;\n$indigo: $indigo;\n$purple: $purple;\n$pink: $pink;\n$red: $red;\n$orange: $orange;\n$yellow: $yellow;\n$green: $green;\n$teal: $teal;\n$cyan: $cyan;\n$white: $white;\n$gray: #434a54;\n$gray-light: #aab2bd;\n$gray-lighter: #e8eff4;\n$gray-lightest: #e6e9ed;\n$gray-dark: #0f1531;\n$black: #000000;\n\n$theme-colors: (\n primary: #248afd,\n secondary: #a3a4a5,\n success: #71c016,\n info: #68afff,\n warning: #f5a623,\n danger: #ff4747,\n light: #f8f9fa,\n dark: #282f3a\n);\n\n$primary: #248afd;\n$secondary: #a3a4a5;\n$success: #71c016;\n$info: #68afff;\n$warning: #f5a623;\n$danger: #ff4747;\n$light: #f8f9fa;\n$dark: #282f3a;\n\n$theme-gradient-colors: (\n primary: linear-gradient(230deg, #759bff, #843cf6),\n secondary: linear-gradient(to right, #e7ebf0, #868e96),\n success: linear-gradient(45deg, #7bffce, #30c93e),\n info: linear-gradient(to bottom, #0e4cfd, #6a8eff),\n warning: linear-gradient(135deg, #ffc480, #ff763b),\n danger: linear-gradient(316deg, #fc5286, #fbaaa2),\n light: linear-gradient(to right, #cfd9df 0%, #e2ebf0 100%),\n dark: linear-gradient(to right, #7d7979 0%, #000000 100%)\n);\n\n////////// COLOR SYSTEM //////////\n\n////////// COLOR VARIABLES //////////\n$content-bg: #dddce1;\n$border-color: #c9ccd7;\n\n////////// COLOR VARIABLES //////////\n\n\n\n////////// SOCIAL COLORS //////////\n\n$social-colors: (\n twitter: #2caae1,\n facebook: #3b579d,\n google: #dc4a38,\n linkedin: #0177b5,\n pinterest: #cc2127,\n youtube: #e52d27,\n github: #333333,\n behance: #1769ff,\n dribbble: #ea4c89,\n reddit: #ff4500\n);\n\n////////// SOCIAL COLORS //////////\n\n////////// FONTS//\n\n$type: 'Roboto', sans-serif;\n\n$default-font-size: .875rem; // 14px as base font size\n\n$text-muted: #686868;\n$body-color: #000;\n\n////////// FONT VARIABLES //////////\n\n///////// FOOTER ////////\n$footer-height: 75px;\n$footer-bg: $content-bg;\n$footer-color: color(dark);\n///////// FOOTER ////////\n\n///////// BUTTONS ////////\n\n$button-fixed-width: 150px;\n$btn-padding-y: .875rem;\n$btn-padding-x: 1.5rem;\n$btn-line-height: 1;\n\n$btn-padding-y-xs: .5rem;\n$btn-padding-x-xs: .75rem;\n\n$btn-padding-y-sm: .50rem;\n$btn-padding-x-sm: .81rem;\n\n$btn-padding-y-lg: 1rem;\n$btn-padding-x-lg: 3rem;\n\n$btn-font-size: .875rem;\n$btn-font-size-xs: .625rem;\n$btn-font-size-sm: .875rem;\n$btn-font-size-lg: .875rem;\n\n$btn-border-radius: .1875rem;\n$btn-border-radius-xs: .1875rem;\n$btn-border-radius-sm: .1875rem;\n$btn-border-radius-lg: .1875rem;\n\n///////// BUTTONS ////////\n\n\n\n///////// FORMS /////////\n\n$input-bg: color(white);\n$input-border-radius: 2px;\n$input-placeholder-color: #c9c8c8;\n$input-font-size: .875rem;\n\n$input-height : 2.875rem;\n$input-height-sm : 2.25rem;\n$input-height-lg : 3.5rem;\n\n$input-padding-y: .875rem;\n$input-padding-x: 1.375rem;\n$input-line-height: 1;\n\n$input-padding-y-xs: .5rem;\n$input-padding-x-xs: .75rem;\n\n$input-padding-y-sm: .50rem;\n$input-padding-x-sm: .81rem;\n\n$input-padding-y-lg: .94rem;\n$input-padding-x-lg: 1.94rem;\n\n///////// FORMS /////////\n\n//////// DROPDOWNS ///////\n\n$dropdown-border-color: $border-color;\n$dropdown-divider-bg: $border-color;\n$dropdown-link-color: $body-color;\n$dropdown-header-color: $body-color;\n$dropdown-link-hover-bg: #eaeaf1;\n//////// DROPDOWNS ///////\n\n//////// TABLES ////////\n\n$table-accent-bg: transparent;\n$table-hover-bg: #eaeaf1;\n$table-cell-padding: 1.25rem .9375rem;\n$table-border-color: $border-color;\n\n$table-inverse-bg: #2a2b32;\n$table-inverse-color: color(white);\n\n//////// TABLES ////////\n\n\n\n////////// MEASUREMENT AND PROPERTY VARIABLES //////////\n\n$border-property: 1px solid $border-color;\n$card-spacing-y: 1.875rem;\n$card-padding-y: 1.25rem;\n$card-padding-x: 1.437rem;\n$card-border-radius: 0;\n$card-border-color: #e3e3e3;\n$card-box-shadow: 4px 8px 9px -2px #c7c5d8;\n$card-title-color: #787878;\n$card-description-color: #76838f;\n$grid-gutter-width: 30px;\n$action-transition-duration: 0.25s;\n$action-transition-timing-function: ease;\n////////// OTHER VARIABLES //////////\n\n\n\n///////// TABS VARIABLES //////////\n$nav-tabs-border-color: #ebedf2;\n$nav-tabs-link-bg: #f6f8fa;\n$nav-tabs-link-color: #000000;\n$nav-tabs-link-hover-border-color: $nav-tabs-border-color $nav-tabs-border-color $nav-tabs-border-color;\n$nav-tabs-link-active-color: $body-color;\n$nav-tabs-link-active-bg: $white;\n$nav-tabs-link-active-border-color: $nav-tabs-border-color $nav-tabs-border-color $nav-tabs-link-active-bg;\n$nav-pills-custom-bg: #fcfcfd;\n//////// TABS VARIABLES /////////\n\n\n\n///////////////////////////////////////////////////////////////////////////////////////////////\n\n\n\n////////// SIDEBAR ////////\n$sidebar-width-lg: 237px;\n$sidebar-width-mini: 185px;\n$sidebar-width-icon: 70px;\n\n$sidebar-light-bg: $content-bg;\n$sidebar-light-menu-color: #787878;\n$sidebar-light-submenu-color: #656565;\n$sidebar-light-menu-active-bg: initial;\n$sidebar-light-menu-active-color: $primary;\n$sidebar-light-menu-hover-bg: #e8e7ec;\n$sidebar-light-menu-hover-color: #56595a;\n$sidebar-light-submenu-hover-color: $black;\n$sidebar-light-submenu-active-color: $black;\n$sidebar-light-menu-icon-color: $sidebar-light-menu-color;\n$sidebar-light-menu-arrow-color: #686868;\n$sidebar-light-profile-name-color: #404852;\n$sidebar-light-profile-title-color: #8d9498;\n\n\n$sidebar-menu-font-size: .875rem;\n$sidebar-menu-padding-left: 1rem;\n$sidebar-menu-padding-right: 1.937rem;\n$sidebar-menu-padding-top: .75rem;\n$sidebar-menu-padding-bottom: .75rem;\n\n$sidebar-submenu-padding: .25rem 0 0 3.07rem;\n$sidebar-submenu-font-size: .875rem;\n$sidebar-submenu-item-padding: .7rem 1rem;\n\n$sidebar-icon-font-size: 1rem;\n$sidebar-arrow-font-size: .625rem;\n\n$sidebar-profile-bg: transparent;\n$sidebar-profile-padding: 0 1.625rem 2.25rem 1.188rem;\n\n$sidebar-mini-menu-padding: .8125rem 1rem .8125rem 1rem;\n\n$sidebar-icon-only-menu-padding: .5rem 1.625rem .5rem 1.188rem;\n$sidebar-icon-only-submenu-padding: 0 0 0 1.5rem;\n\n$sidebar-box-shadow: 6px 16px 31px -18px #b7bcd1;\n\n$rtl-sidebar-submenu-padding: 0 4.5rem 0 0;\n\n$icon-only-collapse-width: 190px;\n$icon-only-menu-bg-light: $sidebar-light-bg;\n\n///////// SIDEBAR ////////\n\n\n///////// NAVBAR ////////\n\n$navbar-default-bg: $white;\n$navbar-box-shadow: 0 5px 21px -5px #cdd1e1;\n$navbar-height: 70px;\n$navbar-menu-color: #9b9b9b;\n$navbar-font-size: 1rem;\n$navbar-icon-font-size: .9375rem;\n\n///////// NAVBAR ////////\n$buy-nowbanner-padding-top:60px;","@import \"compass/functions\";\n@import \"compass/utilities\";\n@import \"compass/typography\";\n@import \"compass/css3\";\n","@import \"functions/lists\";\n@import \"functions/cross_browser_support\";\n@import \"functions/gradient_support\";\n@import \"functions/constants\";\n@import \"functions/display\";\n@import \"functions/colors\";\n","//\n// A partial implementation of the Ruby list functions from Compass:\n// https://github.com/Compass/compass/blob/stable/lib/compass/sass_extensions/functions/lists.rb\n//\n\n\n// compact is part of libsass\n\n@function -compass-nth($list, $place) {\n // Yep, Sass-lists are 1-indexed.\n @if $place == \"first\" {\n $place: 1;\n }\n @if $place == \"last\" {\n $place: length($list);\n }\n @return nth($list, $place);\n}\n\n// compass_list can't be implemented in sass script\n\n@function -compass-space-list($item1, $item2:null, $item3:null, $item4:null, $item5:null, $item6:null, $item7:null, $item8:null, $item9:null) {\n $items: ();\n // Support for polymorphism.\n @if type-of($item1) == 'list' {\n // Passing a single array of properties.\n $items: $item1;\n } @else {\n $items: $item1 $item2 $item3 $item4 $item5 $item6 $item7 $item8 $item9;\n }\n\n $full: first-value-of($items);\n\n @for $i from 2 through length($items) {\n $item: nth($items, $i);\n @if $item != null {\n $full: $full $item;\n }\n }\n\n @return $full;\n}\n\n@function -compass-list-size($list) {\n @return length($list);\n}\n\n@function -compass-slice($list, $start, $end: false) {\n @if $end == false {\n $end: length($list);\n }\n $full: nth($list, $start);\n @for $i from $start + 1 through $end {\n $full: $full, nth($list, $i);\n }\n @return $full;\n}\n\n@function reject($list, $reject1, $reject2:null, $reject3:null, $reject4:null, $reject5:null, $reject6:null, $reject7:null, $reject8:null, $reject9:null) {\n $rejects: $reject1, $reject2, $reject3, $reject4, $reject5, $reject6, $reject7, $reject8, $reject9;\n\n $full: false;\n @each $item in $list {\n @if index($rejects, $item) {}\n @else {\n @if $full {\n $full: $full, $item;\n }\n @else {\n $full: $item;\n }\n }\n }\n @return $full;\n}\n\n@function first-value-of($list) {\n @return nth($list, 1);\n}\n\n@function compact($vars...) {\n $separator: list-separator($vars);\n $list: ();\n @each $var in $vars {\n @if $var {\n $list: append($list, $var, $separator);\n }\n }\n @return $list;\n}\n","// \n// A partial implementation of the Ruby cross browser support functions from Compass:\n// https://github.com/Compass/compass/blob/stable/lib/compass/sass_extensions/functions/cross_browser_support.rb\n// \n\n@function prefixed($prefix, $property1, $property2:null, $property3:null, $property4:null, $property5:null, $property6:null, $property7:null, $property8:null, $property9:null) {\n $properties: $property1, $property2, $property3, $property4, $property5, $property6, $property7, $property8, $property9;\n $prefixed: false;\n @each $item in $properties {\n @if type-of($item) == 'string' {\n $prefixed: $prefixed or str-index($item, 'url') != 1 and str-index($item, 'rgb') != 1 and str-index($item, '#') != 1;\n } @elseif type-of($item) == 'color' {\n } @elseif $item != null {\n $prefixed: true;\n }\n }\n @return $prefixed;\n}\n\n@function prefix($prefix, $property1, $property2:null, $property3:null, $property4:null, $property5:null, $property6:null, $property7:null, $property8:null, $property9:null) {\n $properties: \"\";\n\n // Support for polymorphism.\n @if type-of($property1) == 'list' {\n // Passing a single array of properties.\n $properties: $property1;\n } @else {\n // Passing multiple properties.\n $properties: $property1, $property2, $property3, $property4, $property5, $property6, $property7, $property8, $property9;\n }\n\n $props: false;\n @each $item in $properties {\n @if $item == null {}\n @else {\n @if prefixed($prefix, $item) {\n $item: #{$prefix}-#{$item};\n }\n @if $props {\n $props: $props, $item;\n }\n @else {\n $props: $item;\n }\n }\n }\n @return $props;\n}\n\n@function -svg($property1, $property2:null, $property3:null, $property4:null, $property5:null, $property6:null, $property7:null, $property8:null, $property9:null) {\n @return prefix('-svg', $property1, $property2, $property3, $property4, $property5, $property6, $property7, $property8, $property9);\n}\n\n@function -owg($property1, $property2:null, $property3:null, $property4:null, $property5:null, $property6:null, $property7:null, $property8:null, $property9:null) {\n @return prefix('-owg', $property1, $property2, $property3, $property4, $property5, $property6, $property7, $property8, $property9);\n}\n\n@function -webkit($property1, $property2:null, $property3:null, $property4:null, $property5:null, $property6:null, $property7:null, $property8:null, $property9:null) {\n @return prefix('-webkit', $property1, $property2, $property3, $property4, $property5, $property6, $property7, $property8, $property9);\n}\n\n@function -moz($property1, $property2:null, $property3:null, $property4:null, $property5:null, $property6:null, $property7:null, $property8:null, $property9:null) {\n @return prefix('-moz', $property1, $property2, $property3, $property4, $property5, $property6, $property7, $property8, $property9);\n}\n\n@function -o($property1, $property2:null, $property3:null, $property4:null, $property5:null, $property6:null, $property7:null, $property8:null, $property9:null) {\n @return prefix('-o', $property1, $property2, $property3, $property4, $property5, $property6, $property7, $property8, $property9);\n}\n\n@function -pie($property1, $property2:null, $property3:null, $property4:null, $property5:null, $property6:null, $property7:null, $property8:null, $property9:null) {\n @return prefix('-pie', $property1, $property2, $property3, $property4, $property5, $property6, $property7, $property8, $property9);\n}\n","// \n// A partial implementation of the Ruby gradient support functions from Compass:\n// https://github.com/Compass/compass/blob/v0.12.2/lib/compass/sass_extensions/functions/gradient_support.rb\n// \n\n@function color-stops($item1, $item2:null, $item3:null, $item4:null, $item5:null, $item6:null, $item7:null, $item8:null, $item9:null) {\n $items: $item2, $item3, $item4, $item5, $item6, $item7, $item8, $item9;\n $full: $item1;\n @each $item in $items {\n @if $item != null {\n $full: $full, $item;\n } \n }\n @return $full;\n}","// \n// A partial implementation of the Ruby constants functions from Compass:\n// https://github.com/Compass/compass/blob/stable/lib/compass/sass_extensions/functions/constants.rb\n// \n\n@function opposite-position($from) {\n @if ($from == top) {\n @return bottom;\n } @else if ($from == bottom) {\n @return top;\n } @else if ($from == left) {\n @return right;\n } @else if ($from == right) {\n @return left;\n } @else if ($from == center) {\n @return center;\n }\n}\n","// \n// A partial implementation of the Ruby display functions from Compass:\n// https://github.com/Compass/compass/blob/stable/core/lib/compass/core/sass_extensions/functions/display.rb\n// \n\n@function elements-of-type($type){\n @if ($type == block){\n @return address, article, aside, blockquote, center, dir, div, dd, details, dl, dt, fieldset, figcaption, figure, form, footer, frameset, h1, h2, h3, h4, h5, h6, hr, header, hgroup, isindex, main, menu, nav, noframes, noscript, ol, p, pre, section, summary, ul;\n } @else if ($type == inline){\n @return a, abbr, acronym, audio, b, basefont, bdo, big, br, canvas, cite, code, command, datalist, dfn, em, embed, font, i, img, input, keygen, kbd, label, mark, meter, output, progress, q, rp, rt, ruby, s, samp, select, small, span, strike, strong, sub, sup, textarea, time, tt, u, var, video, wbr;\n } @else if ($type == inline-block){\n @return img;\n } @else if ($type == table){\n @return table;\n } @else if ($type == list-item){\n @return li;\n } @else if ($type == table-row-group){\n @return tbody;\n } @else if ($type == table-header-group){\n @return thead;\n } @else if ($type == table-footer-group){\n @return tfoot;\n } @else if ($type == table-row){\n @return tr;\n } @else if ($type == table-cell){\n @return th, td;\n } @else if ($type == html5-block){\n @return article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary;\n } @else if ($type == html5-inline){\n @return audio, canvas, command, datalist, embed, keygen, mark, meter, output, progress, rp, rt, ruby, time, video, wbr;\n } @else if ($type == html5){\n @return article, aside, audio, canvas, command, datalist, details, embed, figcaption, figure, footer, header, hgroup, keygen, main, mark, menu, meter, nav, output, progress, rp, rt, ruby, section, summary, time, video, wbr;\n } @else if ($type == text-input){\n @return input, textarea;\n }\n}\n","// \n// A partial implementation of the Ruby colors functions from Compass:\n// https://github.com/Compass/compass/blob/stable/core/lib/compass/core/sass_extensions/functions/colors.rb\n//\n\n// a genericized version of lighten/darken so that negative values can be used.\n@function adjust-lightness($color, $amount) {\n @return adjust-color($color, $lightness: $amount);\n}\n\n// Scales a color's lightness by some percentage.\n// If the amount is negative, the color is scaled darker, if positive, it is scaled lighter.\n// This will never return a pure light or dark color unless the amount is 100%.\n@function scale-lightness($color, $amount) {\n @return scale-color($color, $lightness: $amount);\n}\n\n// a genericized version of saturate/desaturate so that negative values can be used.\n@function adjust-saturation($color, $amount) {\n @return adjust-color($color, $saturation: $amount);\n}\n\n// Scales a color's saturation by some percentage.\n// If the amount is negative, the color is desaturated, if positive, it is saturated.\n// This will never return a pure saturated or desaturated color unless the amount is 100%.\n@function scale-saturation($color, $amount) {\n @return scale-color($color, $saturation: $amount);\n}\n\n@function shade($color, $percentage) {\n @return mix(#000000, $color, $percentage);\n}\n\n@function tint($color, $percentage) {\n @return mix(#ffffff, $color, $percentage);\n}\n\n","@import \"utilities/color\";\n@import \"utilities/general\";\n@import \"utilities/sprites\";\n@import \"utilities/tables\";\n\n// deprecated\n@import \"typography/links\";\n@import \"typography/lists\";\n@import \"typography/text\";\n","@import \"color/contrast\";","$contrasted-dark-default: #000 !default;\n$contrasted-light-default: #fff !default;\n$contrasted-lightness-threshold: 30% !default;\n\n// Returns the `$light` color when the `$color` is dark\n// and the `$dark` color when the `$color` is light.\n// The `$threshold` is a percent between `0%` and `100%` and it determines\n// when the lightness of `$color` changes from \"dark\" to \"light\".\n@function contrast-color(\n $color,\n $dark: $contrasted-dark-default,\n $light: $contrasted-light-default,\n $threshold: $contrasted-lightness-threshold\n) {\n @return if(lightness($color) < $threshold, $light, $dark)\n}\n\n// Sets the specified background color and calculates a dark or light contrasted text color.\n// The arguments are passed through to the [contrast-color function](#function-contrast-color).\n@mixin contrasted(\n $background-color,\n $dark: $contrasted-dark-default,\n $light: $contrasted-light-default,\n $threshold: $contrasted-lightness-threshold\n) {\n background-color: $background-color;\n color: contrast-color($background-color, $dark, $light, $threshold);\n}","@import \"general/reset\";\n@import \"general/clearfix\";\n@import \"general/float\";\n@import \"general/tag-cloud\";\n@import \"general/hacks\";\n@import \"general/min\";\n","// This module has moved.\n@import \"../../reset/utilities\";\n","// Based on [Eric Meyer's reset 2.0](http://meyerweb.com/eric/tools/css/reset/index.html)\n// Global reset rules.\n// For more specific resets, use the reset mixins provided below\n@mixin global-reset {\n html, body, div, span, applet, object, iframe,\n h1, h2, h3, h4, h5, h6, p, blockquote, pre,\n a, abbr, acronym, address, big, cite, code,\n del, dfn, em, img, ins, kbd, q, s, samp,\n small, strike, strong, sub, sup, tt, var,\n b, u, i, center,\n dl, dt, dd, ol, ul, li,\n fieldset, form, label, legend,\n table, caption, tbody, tfoot, thead, tr, th, td,\n article, aside, canvas, details, embed, \n figure, figcaption, footer, header, hgroup, \n menu, nav, output, ruby, section, summary,\n time, mark, audio, video {\n @include reset-box-model;\n @include reset-font; }\n // Unlike Eric's original reset, we reset the html element to be compatible\n // with the vertical rhythm mixins.\n html {\n @include reset-body; }\n ol, ul {\n @include reset-list-style; }\n table {\n @include reset-table; }\n caption, th, td {\n @include reset-table-cell; }\n q, blockquote {\n @include reset-quotation; }\n a img {\n @include reset-image-anchor-border; }\n @include reset-html5; }\n\n// Reset all elements within some selector scope. To reset the selector itself,\n// mixin the appropriate reset mixin for that element type as well. This could be\n// useful if you want to style a part of your page in a dramatically different way.\n@mixin nested-reset {\n div, span, applet, object, iframe,\n h1, h2, h3, h4, h5, h6, p, blockquote, pre,\n a, abbr, acronym, address, big, cite, code,\n del, dfn, em, img, ins, kbd, q, s, samp,\n small, strike, strong, sub, sup, tt, var,\n b, u, i, center,\n dl, dt, dd, ol, ul, li,\n fieldset, form, label, legend,\n table, caption, tbody, tfoot, thead, tr, th, td,\n article, aside, canvas, details, embed, \n figure, figcaption, footer, header, hgroup, \n menu, nav, output, ruby, section, summary,\n time, mark, audio, video {\n @include reset-box-model;\n @include reset-font; }\n table {\n @include reset-table; }\n caption, th, td {\n @include reset-table-cell; }\n q, blockquote {\n @include reset-quotation; }\n a img {\n @include reset-image-anchor-border; } }\n\n// Reset the box model measurements.\n@mixin reset-box-model {\n margin: 0;\n padding: 0;\n border: 0; }\n\n// Reset the font and vertical alignment.\n@mixin reset-font {\n font: inherit;\n font-size: 100%;\n vertical-align: baseline; }\n\n// Resets the outline when focus.\n// For accessibility you need to apply some styling in its place.\n@mixin reset-focus {\n outline: 0; }\n\n// Reset a body element.\n@mixin reset-body {\n line-height: 1; }\n\n// Reset the list style of an element.\n@mixin reset-list-style {\n list-style: none; }\n\n// Reset a table\n@mixin reset-table {\n border-collapse: collapse;\n border-spacing: 0; }\n\n// Reset a table cell (`th`, `td`)\n@mixin reset-table-cell {\n text-align: left;\n font-weight: normal;\n vertical-align: middle; }\n\n// Reset a quotation (`q`, `blockquote`)\n@mixin reset-quotation {\n quotes: none;\n &:before, &:after {\n content: \"\"; \n content: none; } }\n\n// Resets the border.\n@mixin reset-image-anchor-border {\n border: none; }\n\n// Unrecognized elements are displayed inline.\n// This reset provides a basic reset for block html5 elements\n// so they are rendered correctly in browsers that don't recognize them\n// and reset in browsers that have default styles for them.\n@mixin reset-html5 {\n #{elements-of-type(html5-block)} {\n display: block; } }\n\n// Resets the display of inline and block elements to their default display\n// according to their tag type. Elements that have a default display that varies across\n// versions of html or browser are not handled here, but this covers the 90% use case.\n// Usage Example:\n//\n// // Turn off the display for both of these classes\n// .unregistered-only, .registered-only\n// display: none\n// // Now turn only one of them back on depending on some other context.\n// body.registered\n// +reset-display(\".registered-only\")\n// body.unregistered\n// +reset-display(\".unregistered-only\")\n@mixin reset-display($selector: \"\", $important: false) {\n #{append-selector(elements-of-type(\"inline\"), $selector)} {\n @if $important {\n display: inline !important; }\n @else {\n display: inline; } }\n #{append-selector(elements-of-type(\"block\"), $selector)} {\n @if $important {\n display: block !important; }\n @else {\n display: block; } } }\n","// @doc off\n// Extends the bottom of the element to enclose any floats it contains.\n// @doc on\n\n@import \"hacks\";\n\n// This basic method is preferred for the usual case, when positioned\n// content will not show outside the bounds of the container.\n//\n// Recommendations include using this in conjunction with a width.\n// Credit: [quirksmode.org](http://www.quirksmode.org/blog/archives/2005/03/clearing_floats.html)\n@mixin clearfix {\n overflow: hidden;\n @include has-layout;\n}\n\n// This older method from Position Is Everything called\n// [Easy Clearing](http://www.positioniseverything.net/easyclearing.html)\n// has the advantage of allowing positioned elements to hang\n// outside the bounds of the container at the expense of more tricky CSS.\n@mixin legacy-pie-clearfix {\n &:after {\n content : \"\\0020\";\n display : block;\n height : 0;\n clear : both;\n overflow : hidden;\n visibility : hidden;\n }\n @include has-layout;\n}\n\n// This is an updated version of the PIE clearfix method that reduces the amount of CSS output.\n// If you need to support Firefox before 3.5 you need to use `legacy-pie-clearfix` instead.\n//\n// Adapted from: [A new micro clearfix hack](http://nicolasgallagher.com/micro-clearfix-hack/)\n@mixin pie-clearfix {\n &:after {\n content: \"\";\n display: table;\n clear: both;\n }\n @include has-layout;\n}\n","@import \"../../support\";\n\n// The `zoom` approach generates less CSS but does not validate.\n// Set this to `block` to use the display-property to hack the\n// element to gain layout.\n$default-has-layout-approach: zoom !default;\n\n// This mixin causes an element matching the selector\n// to gain the \"hasLayout\" property in internet explorer.\n// More information on [hasLayout](http://reference.sitepoint.com/css/haslayout).\n@mixin has-layout($approach: $default-has-layout-approach) {\n @if $legacy-support-for-ie {\n @if $approach == zoom {\n @include has-layout-zoom;\n } @else if $approach == block {\n @include has-layout-block;\n } @else {\n @warn \"Unknown has-layout approach: #{$approach}\";\n @include has-layout-zoom;\n }\n }\n}\n\n@mixin has-layout-zoom {\n @if $legacy-support-for-ie6 or $legacy-support-for-ie7 {\n *zoom: 1;\n }\n}\n\n@mixin has-layout-block {\n @if $legacy-support-for-ie {\n // This makes ie6 get layout\n display: inline-block;\n // and this puts it back to block\n & { display: block; }\n }\n}\n\n// A hack to supply IE6 (and below) with a different property value.\n// [Read more](http://www.cssportal.com/css-hacks/#in_css-important).\n@mixin bang-hack($property, $value, $ie6-value) {\n @if $legacy-support-for-ie6 {\n #{$property}: #{$value} !important;\n #{$property}: #{$ie6-value};\n }\n}\n","// Usually compass hacks apply to both ie6 & 7 -- set this to false to disable support for both.\n$legacy-support-for-ie: true !default;\n\n// Setting this to false will result in smaller output, but no support for ie6 hacks\n$legacy-support-for-ie6: $legacy-support-for-ie !default;\n\n// Setting this to false will result in smaller output, but no support for ie7 hacks\n$legacy-support-for-ie7: $legacy-support-for-ie !default;\n\n// Setting this to false will result in smaller output, but no support for legacy ie8 hacks\n$legacy-support-for-ie8: $legacy-support-for-ie !default;\n\n// @private\n// The user can simply set $legacy-support-for-ie and 6, 7, and 8 will be set accordingly,\n// But in case the user set each of those explicitly, we need to sync the value of\n// this combined variable.\n$legacy-support-for-ie: $legacy-support-for-ie6 or $legacy-support-for-ie7 or $legacy-support-for-ie8;\n\n// Whether to output legacy support for mozilla.\n// Usually this means hacks to support Firefox 3.6 or earlier.\n$legacy-support-for-mozilla: true;\n\n// Support for mozilla in experimental css3 properties (-moz).\n$experimental-support-for-mozilla : true !default;\n// Support for webkit in experimental css3 properties (-webkit).\n$experimental-support-for-webkit : true !default;\n// Support for webkit's original (non-standard) gradient syntax.\n$support-for-original-webkit-gradients : true !default;\n// Support for opera in experimental css3 properties (-o).\n$experimental-support-for-opera : true !default;\n// Support for microsoft in experimental css3 properties (-ms).\n$experimental-support-for-microsoft : true !default;\n// Support for khtml in experimental css3 properties (-khtml).\n$experimental-support-for-khtml : false !default;\n// Support for svg in experimental css3 properties.\n// Setting this to true might add significant size to your\n// generated stylesheets.\n$experimental-support-for-svg : false !default;\n// Support for CSS PIE in experimental css3 properties (-pie).\n$experimental-support-for-pie : false !default;\n","// Implementation of float:left with fix for the\n// [double-margin bug in IE5/6](http://www.positioniseverything.net/explorer/doubled-margin.html)\n@mixin float-left {\n @include float(left); }\n\n// Implementation of float:right with fix for the\n// [double-margin bug in IE5/6](http://www.positioniseverything.net/explorer/doubled-margin.html)\n@mixin float-right {\n @include float(right); }\n\n// Direction independent float mixin that fixes the\n// [double-margin bug in IE5/6](http://www.positioniseverything.net/explorer/doubled-margin.html)\n@mixin float($side: left) {\n display: inline;\n float: unquote($side); }\n\n// Resets floated elements back to their default of `float: none` and defaults\n// to `display: block` unless you pass `inline` as an argument\n//\n// Usage Example:\n//\n// body.homepage\n// #footer li\n// +float-left\n// body.signup\n// #footer li\n// +reset-float\n@mixin reset-float($display: block) {\n float: none;\n display: $display; }","// Emits styles for a tag cloud\n@mixin tag-cloud($base-size: 1em) {\n font-size: $base-size;\n line-height: 1.2 * $base-size;\n .xxs, .xs, .s, .l, .xl, .xxl {\n line-height: 1.2 * $base-size; }\n .xxs {\n font-size: $base-size / 2; }\n .xs {\n font-size: 2 * $base-size / 3; }\n .s {\n font-size: 3 * $base-size / 4; }\n .l {\n font-size: 4 * $base-size / 3; }\n .xl {\n font-size: 3 * $base-size / 2; }\n .xxl {\n font-size: 2 * $base-size; } }\n","@import \"hacks\";\n\n//**\n// Cross browser min-height mixin.\n@mixin min-height($value) {\n @include hacked-minimum(height, $value); }\n\n//**\n// Cross browser min-width mixin.\n@mixin min-width($value) {\n @include hacked-minimum(width, $value); }\n\n// @private This mixin is not meant to be used directly.\n@mixin hacked-minimum($property, $value) {\n min-#{$property}: $value;\n @include bang-hack($property, auto, $value); }\n","@import \"sprites/base\";\n@import \"sprites/sprite-img\";\n","// Determines those states for which you want to enable magic sprite selectors\n$sprite-selectors: hover, target, active !default;\n\n// Set the width and height of an element to the original\n// dimensions of an image before it was included in the sprite.\n@mixin sprite-dimensions($map, $sprite) {\n height: image-height(sprite-file($map, $sprite));\n width: image-width(sprite-file($map, $sprite));\n}\n\n// Set the background position of the given sprite `$map` to display the\n// sprite of the given `$sprite` name. You can move the image relative to its\n// natural position by passing `$offset-x` and `$offset-y`.\n@mixin sprite-background-position($map, $sprite, $offset-x: 0, $offset-y: 0) {\n background-position: sprite-position($map, $sprite, $offset-x, $offset-y); \n}\n\n\n// Determines if you want to include magic selectors in your sprites\n$disable-magic-sprite-selectors:false !default;\n\n// Include the position and (optionally) dimensions of this `$sprite`\n// in the given sprite `$map`. The sprite url should come from either a base\n// class or you can specify the `sprite-url` explicitly like this:\n//\n// background: $map no-repeat;\n@mixin sprite($map, $sprite, $dimensions: false, $offset-x: 0, $offset-y: 0) {\n @include sprite-background-position($map, $sprite, $offset-x, $offset-y);\n @if $dimensions {\n @include sprite-dimensions($map, $sprite);\n }\n @if not($disable-magic-sprite-selectors) {\n @include sprite-selectors($map, $sprite, $sprite, $offset-x, $offset-y);\n }\n}\n\n// Include the selectors for the `$sprite` given the `$map` and the \n// `$full-sprite-name`\n// @private\n@mixin sprite-selectors($map, $sprite-name, $full-sprite-name, $offset-x: 0, $offset-y: 0) {\n @each $selector in $sprite-selectors {\n @if sprite_has_selector($map, $sprite-name, $selector) {\n &:#{$selector}, &.#{$full-sprite-name}_#{$selector}, &.#{$full-sprite-name}-#{$selector} {\n @include sprite-background-position($map, \"#{$sprite-name}_#{$selector}\", $offset-x, $offset-y);\n }\n }\n }\n}\n\n// Generates a class for each space separated name in `$sprite-names`.\n// The class will be of the form .-.\n//\n// If a base class is provided, then each class will extend it.\n//\n// If `$dimensions` is `true`, the sprite dimensions will specified.\n@mixin sprites($map, $sprite-names, $base-class: false, $dimensions: false, $prefix: sprite-map-name($map), $offset-x: 0, $offset-y: 0) {\n @each $sprite-name in $sprite-names {\n @if sprite_does_not_have_parent($map, $sprite-name) {\n $full-sprite-name: \"#{$prefix}-#{$sprite-name}\";\n .#{$full-sprite-name} {\n @if $base-class { @extend #{$base-class}; }\n @include sprite($map, $sprite-name, $dimensions, $offset-x, $offset-y);\n }\n }\n }\n}","// @doc off\n// Example 1:\n//\n// a.twitter\n// +sprite-img(\"icons-32.png\", 1)\n// a.facebook\n// +sprite-img(\"icons-32png\", 2)\n//\n// Example 2:\n//\n// a\n// +sprite-background(\"icons-32.png\")\n// a.twitter\n// +sprite-column(1)\n// a.facebook\n// +sprite-row(2)\n// @doc on\n\n$sprite-default-size: 32px !default;\n\n$sprite-default-margin: 0px !default;\n\n$sprite-image-default-width: $sprite-default-size !default;\n\n$sprite-image-default-height: $sprite-default-size !default;\n\n// Sets all the rules for a sprite from a given sprite image to show just one of the sprites.\n// To reduce duplication use a sprite-bg mixin for common properties and a sprite-select mixin for positioning.\n@mixin sprite-img($img, $col, $row: 1, $width: $sprite-image-default-width, $height: $sprite-image-default-height, $margin: $sprite-default-margin) {\n @include sprite-background($img, $width, $height);\n @include sprite-position($col, $row, $width, $height, $margin); \n}\n\n// Sets rules common for all sprites, assumes you want a square, but allows a rectangular region.\n@mixin sprite-background($img, $width: $sprite-default-size, $height: $width) {\n @include sprite-background-rectangle($img, $width, $height); \n}\n\n// Sets rules common for all sprites, assumes a rectangular region.\n@mixin sprite-background-rectangle($img, $width: $sprite-image-default-width, $height: $sprite-image-default-height) {\n background: image-url($img) no-repeat;\n width: $width;\n height: $height;\n overflow: hidden; \n}\n\n// Allows horizontal sprite positioning optimized for a single row of sprites.\n@mixin sprite-column($col, $width: $sprite-image-default-width, $margin: $sprite-default-margin) {\n @include sprite-position($col, 1, $width, 0px, $margin); \n}\n\n// Allows vertical sprite positioning optimized for a single column of sprites.\n@mixin sprite-row($row, $height: $sprite-image-default-height, $margin: $sprite-default-margin) {\n @include sprite-position(1, $row, 0px, $height, $margin); \n}\n\n// Allows vertical and horizontal sprite positioning from a grid of equal dimensioned sprites.\n@mixin sprite-position($col, $row: 1, $width: $sprite-image-default-width, $height: $sprite-image-default-height, $margin: $sprite-default-margin) {\n $x: ($col - 1) * -$width - ($col - 1) * $margin;\n $y: ($row - 1) * -$height - ($row - 1) * $margin;\n background-position: $x $y; \n}\n\n\n\n// Similar to 'sprite-replace-text-with-dimensions' but does not autmaticly set the demensions\n@mixin sprite-replace-text ($map, $sprite, $dimensions: false, $offset-x: 0, $offset-y: 0) { \n @include hide-text;\n @include sprite($map, $sprite, $dimensions, $offset-x, $offset-y);\n background-image: $map;\n background-repeat: no-repeat;\n}\n\n// Similar to 'replace-text-with-dimensions' but with sprites\n// To use, create your sprite and then pass it in the `$map` param\n// The name of the image in the sprite folder should be `$img-name`\n@mixin sprite-replace-text-with-dimensions ($map, $sprite, $offset-x: 0, $offset-y: 0){ \n @include sprite-replace-text ($map, $sprite, true, $offset-x, $offset-y);\n}","@import \"tables/alternating-rows-and-columns\";\n@import \"tables/borders\";\n@import \"tables/scaffolding\";\n","@mixin alternating-rows-and-columns($even-row-color, $odd-row-color, $dark-intersection, $header-color: white, $footer-color: white) {\n th {\n background-color: $header-color;\n &.even, &:nth-child(2n) {\n background-color: $header-color - $dark-intersection; } }\n tr {\n &.odd, &:nth-child(2n+1) {\n td {\n background-color: $odd-row-color;\n &.even, &:nth-child(2n) {\n background-color: $odd-row-color - $dark-intersection; } } }\n }\n tr.even {\n td {\n background-color: $even-row-color;\n &.even, &:nth-child(2n) {\n background-color: $even-row-color - $dark-intersection; } } }\n tfoot {\n th, td {\n background-color: $footer-color;\n &.even, &:nth-child(2n) {\n background-color: $footer-color - $dark-intersection; } } } }\n","@mixin outer-table-borders($width: 2px, $color: black) {\n border: $width solid $color;\n thead {\n th {\n border-bottom: $width solid $color; } }\n tfoot {\n th, td {\n border-top: $width solid $color; } }\n th {\n &:first-child {\n border-right: $width solid $color; } } }\n\n@mixin inner-table-borders($width: 2px, $color: black) {\n th, td {\n border: {\n right: $width solid $color;\n bottom: $width solid $color;\n left-width: 0px;\n top-width: 0px; };\n &:last-child,\n &.last {\n border-right-width: 0px; } }\n\n// IE8 ignores rules that are included on the same line as :last-child\n// see http://www.richardscarrott.co.uk/posts/view/ie8-last-child-bug for details\n\n tbody, tfoot {\n tr:last-child {\n th, td {\n border-bottom-width: 0px; } }\n tr.last {\n th, td {\n border-bottom-width: 0px; } } } }\n","@mixin table-scaffolding {\n th {\n text-align: center;\n font-weight: bold; }\n td,\n th {\n padding: 2px;\n &.numeric {\n text-align: right; } } }\n","@import \"links/hover-link\";\n@import \"links/link-colors\";\n@import \"links/unstyled-link\";\n","// a link that only has an underline when you hover over it\n@mixin hover-link {\n text-decoration: none;\n &:hover {\n text-decoration: underline; } }\n","// Set all the colors for a link with one mixin call.\n// Order of arguments is:\n//\n// 1. normal\n// 2. hover\n// 3. active\n// 4. visited\n// 5. focus\n//\n// Those states not specified will inherit.\n// Mixin to an anchor link like so:\n// a\n// +link-colors(#00c, #0cc, #c0c, #ccc, #cc0)\n\n@mixin link-colors($normal, $hover: false, $active: false, $visited: false, $focus: false) {\n color: $normal;\n @if $visited {\n &:visited {\n color: $visited; } }\n @if $focus {\n &:focus {\n color: $focus; } }\n @if $hover {\n &:hover {\n color: $hover; } }\n @if $active {\n &:active {\n color: $active; } } }\n","// A link that looks and acts like the text it is contained within\n@mixin unstyled-link {\n color: inherit;\n text-decoration: inherit;\n cursor: inherit;\n &:active, &:focus {\n outline: none; } }\n","@import \"lists/horizontal-list\";\n@import \"lists/inline-list\";\n@import \"lists/inline-block-list\";\n@import \"lists/bullets\";\n","// Horizontal list layout module.\n//\n// Easy mode using simple descendant li selectors:\n//\n// ul.nav\n// +horizontal-list\n//\n// Advanced mode:\n// If you need to target the list items using a different selector then use\n// +horizontal-list-container on your ul/ol and +horizontal-list-item on your li.\n// This may help when working on layouts involving nested lists. For example:\n//\n// ul.nav\n// +horizontal-list-container\n// > li\n// +horizontal-list-item\n\n@import \"bullets\";\n@import \"../../utilities/general/clearfix\";\n@import \"../../utilities/general/reset\";\n@import \"../../utilities/general/float\";\n\n// Can be mixed into any selector that target a ul or ol that is meant\n// to have a horizontal layout. Used to implement +horizontal-list.\n@mixin horizontal-list-container {\n @include reset-box-model;\n @include clearfix; }\n\n// Can be mixed into any li selector that is meant to participate in a horizontal layout.\n// Used to implement +horizontal-list.\n//\n// :last-child is not fully supported\n// see http://www.quirksmode.org/css/contents.html#t29 for the support matrix\n//\n// IE8 ignores rules that are included on the same line as :last-child\n// see http://www.richardscarrott.co.uk/posts/view/ie8-last-child-bug for details\n//\n// Setting `$padding` to `false` disables the padding between list elements\n@mixin horizontal-list-item($padding: 4px, $direction: left) {\n @include no-bullet;\n white-space: nowrap;\n @include float($direction);\n @if $padding {\n padding: {\n left: $padding;\n right: $padding;\n }\n &:first-child, &.first { padding-#{$direction}: 0; }\n &:last-child { padding-#{opposite-position($direction)}: 0; }\n &.last { padding-#{opposite-position($direction)}: 0; }\n }\n}\n\n// A list(ol,ul) that is layed out such that the elements are floated left and won't wrap.\n// This is not an inline list.\n//\n// Setting `$padding` to `false` disables the padding between list elements\n@mixin horizontal-list($padding: 4px, $direction: left) {\n @include horizontal-list-container;\n li {\n @include horizontal-list-item($padding, $direction); } }\n","// Turn off the bullet for an element of a list\n@mixin no-bullet {\n list-style-image : none;\n list-style-type : none;\n margin-left : 0;\n}\n\n// turns off the bullets for an entire list\n@mixin no-bullets {\n list-style: none;\n li { @include no-bullet; }\n}\n\n// Make a list(ul/ol) have an image bullet.\n//\n// The mixin should be used like this for an icon that is 5x7:\n//\n// ul.pretty\n// +pretty-bullets(\"my-icon.png\", 5px, 7px)\n//\n// Additionally, if the image dimensions are not provided,\n// The image dimensions will be extracted from the image itself.\n//\n// ul.pretty\n// +pretty-bullets(\"my-icon.png\")\n//\n@mixin pretty-bullets($bullet-icon, $width: image-width($bullet-icon), $height: image-height($bullet-icon), $line-height: 18px, $padding: 14px) {\n margin-left: 0;\n li {\n padding-left: $padding;\n background: image-url($bullet-icon) no-repeat ($padding - $width) / 2 ($line-height - $height) / 2;\n list-style-type: none;\n }\n}\n","// makes a list inline.\n\n@mixin inline-list {\n list-style-type: none;\n &, & li {\n margin: 0px;\n padding: 0px;\n display: inline;\n }\n}\n\n// makes an inline list delimited with the passed string.\n// Defaults to making a comma-separated list.\n//\n// Please make note of the browser support issues before using this mixin:\n//\n// use of `content` and `:after` is not fully supported in all browsers.\n// See quirksmode for the [support matrix](http://www.quirksmode.org/css/contents.html#t15)\n//\n// `:last-child` is not fully supported.\n// see quirksmode for the [support matrix](http://www.quirksmode.org/css/contents.html#t29).\n//\n// IE8 ignores rules that are included on the same line as :last-child\n// see http://www.richardscarrott.co.uk/posts/view/ie8-last-child-bug for details\n\n@mixin delimited-list($separator: \", \") {\n @include inline-list;\n li {\n &:after { content: $separator; }\n &:last-child {\n &:after { content: \"\"; }\n }\n &.last {\n &:after { content: \"\"; }\n }\n }\n}\n\n// See [delimited-list](#mixin-delimited-list)\n// @deprecated\n@mixin comma-delimited-list {\n @warn \"comma-delimited-list is deprecated. Please use delimited-list instead.\";\n @include delimited-list;\n}\n","// Inline-Block list layout module.\n//\n// Easy mode using simple descendant li selectors:\n//\n// ul.nav {\n// @import inline-block-list;\n// }\n//\n// Advanced mode:\n// If you need to target the list items using a different selector then use\n// `@include inline-block-list-container` on your ul/ol and\n// `@include inline-block-list-item` on your li. This may help when working\n// on layouts involving nested lists. For example:\n//\n// ul.nav {\n// @include inline-block-list-container;\n// > li {\n// @include inline-block-list-item;\n// }\n// }\n\n@import \"bullets\";\n@import \"horizontal-list\";\n@import \"../../utilities/general/float\";\n@import \"../../css3/inline-block\";\n\n// Can be mixed into any selector that target a ul or ol that is meant\n// to have an inline-block layout. Used to implement `inline-block-list`.\n@mixin inline-block-list-container {\n @include horizontal-list-container; }\n\n// Can be mixed into any li selector that is meant to participate in a horizontal layout.\n// Used to implement `inline-block-list`.\n@mixin inline-block-list-item($padding: false) {\n @include no-bullet;\n @include inline-block;\n white-space: nowrap;\n @if $padding {\n padding: {\n left: $padding;\n right: $padding;\n };\n }\n}\n\n// A list(ol,ul) that is layed out such that the elements are inline-block and won't wrap.\n@mixin inline-block-list($padding: false) {\n @include inline-block-list-container;\n li {\n @include inline-block-list-item($padding); } }\n","@import \"shared\";\n\n// Set `$inline-block-alignment` to `none` or `false` to disable the output\n// of a vertical-align property in the inline-block mixin.\n// Or set it to a legal value for `vertical-align` to change the default.\n$inline-block-alignment: middle !default;\n\n// Provides a cross-browser method to implement `display: inline-block;`\n@mixin inline-block($alignment: $inline-block-alignment) {\n @if $legacy-support-for-mozilla {\n display: -moz-inline-stack;\n }\n display: inline-block;\n @if $alignment and $alignment != none {\n vertical-align: $alignment;\n }\n @if $legacy-support-for-ie {\n *vertical-align: auto;\n zoom: 1;\n *display: inline;\n }\n}\n","@import \"../support\";\n\n// This mixin provides basic support for CSS3 properties and\n// their corresponding experimental CSS2 properties when\n// the implementations are identical except for the property\n// prefix.\n@mixin experimental($property, $value,\n $moz : $experimental-support-for-mozilla,\n $webkit : $experimental-support-for-webkit,\n $o : $experimental-support-for-opera,\n $ms : $experimental-support-for-microsoft,\n $khtml : $experimental-support-for-khtml,\n $official : true\n) {\n @if $webkit and $experimental-support-for-webkit { -webkit-#{$property} : $value; }\n @if $khtml and $experimental-support-for-khtml { -khtml-#{$property} : $value; }\n @if $moz and $experimental-support-for-mozilla { -moz-#{$property} : $value; }\n @if $ms and $experimental-support-for-microsoft { -ms-#{$property} : $value; }\n @if $o and $experimental-support-for-opera { -o-#{$property} : $value; }\n @if $official { #{$property} : $value; }\n}\n\n// Same as experimental(), but for cases when the property is the same and the value is vendorized\n@mixin experimental-value($property, $value,\n $moz : $experimental-support-for-mozilla,\n $webkit : $experimental-support-for-webkit,\n $o : $experimental-support-for-opera,\n $ms : $experimental-support-for-microsoft,\n $khtml : $experimental-support-for-khtml,\n $official : true\n) {\n @if $webkit and $experimental-support-for-webkit { #{$property} : -webkit-#{$value}; }\n @if $khtml and $experimental-support-for-khtml { #{$property} : -khtml-#{$value}; }\n @if $moz and $experimental-support-for-mozilla { #{$property} : -moz-#{$value}; }\n @if $ms and $experimental-support-for-microsoft { #{$property} : -ms-#{$value}; }\n @if $o and $experimental-support-for-opera { #{$property} : -o-#{$value}; }\n @if $official { #{$property} : #{$value}; }\n}\n","@import \"text/ellipsis\";\n@import \"text/nowrap\";\n@import \"text/replacement\";\n@import \"text/force-wrap\";\n","@import \"../../css3/shared\";\n\n// To get full firefox support, you must install the ellipsis pattern:\n//\n// compass install compass/ellipsis\n$use-mozilla-ellipsis-binding: false !default;\n\n// This technique, by [Justin Maxwell](http://code404.com/), was originally\n// published [here](http://mattsnider.com/css/css-string-truncation-with-ellipsis/).\n// Firefox implementation by [Rikkert Koppes](http://www.rikkertkoppes.com/thoughts/2008/6/).\n@mixin ellipsis($no-wrap: true) {\n @if $no-wrap { white-space: nowrap; }\n overflow: hidden;\n @include experimental(text-overflow, ellipsis,\n not(-moz),\n not(-webkit),\n -o,\n -ms,\n not(-khtml),\n official\n );\n @if $experimental-support-for-mozilla and $use-mozilla-ellipsis-binding {\n -moz-binding: stylesheet-url(unquote(\"xml/ellipsis.xml#ellipsis\"));\n }\n}\n","// When remembering whether or not there's a hyphen in white-space is too hard\n@mixin nowrap { white-space: nowrap; }\n","// Indicates the direction you prefer to move your text\n// when hiding it.\n//\n// `left` is more robust, especially in older browsers.\n// `right` seems have better runtime performance.\n$hide-text-direction: left !default;\n\n// Hides html text and replaces it with an image.\n// If you use this on an inline element, you will need to change the display to block or inline-block.\n// Also, if the size of the image differs significantly from the font size, you'll need to set the width and/or height.\n//\n// Parameters:\n//\n// * `img` -- the relative path from the project image directory to the image, or a url literal.\n// * `x` -- the x position of the background image.\n// * `y` -- the y position of the background image.\n@mixin replace-text($img, $x: 50%, $y: 50%) {\n @include hide-text;\n background: {\n @if is-url($img) {\n image: url($img);\n } @else {\n image: image-url($img);\n }\n repeat: no-repeat;\n position: $x $y;\n };\n}\n\n// Like the `replace-text` mixin, but also sets the width\n// and height of the element according the dimensions of the image.\n//\n// If you set `$inline` to true, then an inline image (data uri) will be used.\n@mixin replace-text-with-dimensions($img, $x: 50%, $y: 50%, $inline: false) {\n @include replace-text(if($inline, inline-image($img), $img), $x, $y);\n width: image-width($img);\n height: image-height($img);\n}\n\n// Hides text in an element so you can see the background.\n//\n// The direction indicates how the text should be moved out of view.\n//\n// See `$hide-text-direction` for more information and to set this globally\n// for your application.\n@mixin hide-text($direction: $hide-text-direction) {\n @if $direction == left {\n $approximate-em-value: 12px;\n $wider-than-any-screen: -9999;\n text-indent: $wider-than-any-screen * $approximate-em-value;\n overflow: hidden;\n text-align: left;\n } @else {\n // slightly wider than the box prevents issues with inline-block elements\n text-indent: 110%;\n white-space: nowrap;\n overflow: hidden;\n }\n}\n\n// Hides text in an element by squishing the text into oblivion.\n// Use this if you need to hide text contained in an inline element\n// but still have it read by a screen reader.\n@mixin squish-text {\n font: 0/0 serif;\n text-shadow: none;\n color: transparent;\n}\n","// Prevent long urls and text from breaking layouts\n// [originally from perishablepress.com](http://perishablepress.com/press/2010/06/01/wrapping-content/)\n@mixin force-wrap {\n white-space: pre; // CSS 2.0\n white-space: pre-wrap; // CSS 2.1\n white-space: pre-line; // CSS 3.0\n white-space: -pre-wrap; // Opera 4-6\n white-space: -o-pre-wrap; // Opera 7\n white-space: -moz-pre-wrap; // Mozilla\n white-space: -hp-pre-wrap; // HP Printers\n word-wrap: break-word; // IE 5+\n}\n","@import \"typography/links\";\n@import \"typography/lists\";\n@import \"typography/text\";\n@import \"typography/vertical_rhythm\";\n","@import \"../layout/grid-background\";\n\n// The base font size.\n$base-font-size: 16px !default;\n\n// The base line height determines the basic unit of vertical rhythm.\n$base-line-height: 24px !default;\n\n// Set the default border style for rhythm borders.\n$default-rhythm-border-style: solid !default;\n\n// The default font size in all browsers.\n$browser-default-font-size: 16px;\n\n// Set to false if you want to use absolute pixels in sizing your typography.\n$relative-font-sizing: true !default;\n\n// Allows the `adjust-font-size-to` mixin and the `lines-for-font-size` function\n// to round the line height to the nearest half line height instead of the\n// nearest integral line height to avoid large spacing between lines.\n$round-to-nearest-half-line: false !default;\n\n// Ensure there is at least this many pixels\n// of vertical padding above and below the text.\n$min-line-padding: 2px !default;\n\n// $base-font-size but in your output unit of choice.\n// Defaults to 1em when `$relative-font-sizing` is true.\n$font-unit: if($relative-font-sizing, 1em, $base-font-size) !default;\n\n// The basic unit of font rhythm.\n$base-rhythm-unit: $base-line-height / $base-font-size * $font-unit;\n\n// The leader is the amount of whitespace in a line.\n// It might be useful in your calculations.\n$base-leader: ($base-line-height - $base-font-size) * $font-unit / $base-font-size;\n\n// The half-leader is the amount of whitespace above and below a line.\n// It might be useful in your calculations.\n$base-half-leader: $base-leader / 2;\n\n// True if a number has a relative unit.\n@function relative-unit($number) {\n @return unit($number) == \"%\" or unit($number) == \"em\" or unit($number) == \"rem\"\n}\n\n// True if a number has an absolute unit.\n@function absolute-unit($number) {\n @return not(relative-unit($number) or unitless($number));\n}\n\n@if $relative-font-sizing and not(relative-unit($font-unit)) {\n @warn \"$relative-font-sizing is true but $font-unit is set to #{$font-unit} which is not a relative unit.\";\n}\n\n// Establishes a font baseline for the given font-size.\n@mixin establish-baseline($font-size: $base-font-size) {\n // IE 6 refuses to resize fonts set in pixels and it weirdly resizes fonts\n // whose root is set in ems. So we set the root font size in percentages of\n // the default font size.\n * html {\n font-size: 100% * ($font-size / $browser-default-font-size);\n }\n html {\n font-size: $font-size;\n @include adjust-leading-to(1, if($relative-font-sizing, $font-size, $base-font-size));\n }\n}\n\n// Resets the line-height to 1 vertical rhythm unit.\n// Does not work on elements whose font-size is different from $base-font-size.\n//\n// @deprecated This mixin will be removed in the next release.\n// Please use the `adjust-leading-to` mixin instead.\n@mixin reset-baseline {\n @include adjust-leading-to(1, if($relative-font-sizing, $base-font-size, $base-font-size));\n}\n\n// Show a background image that can be used to debug your alignments.\n// Include the $img argument if you would rather use your own image than the\n// Compass default gradient image.\n@mixin debug-vertical-alignment($img: false) {\n @if $img {\n background: image-url($img);\n } @else {\n @include baseline-grid-background($base-rhythm-unit);\n }\n}\n\n// Adjust a block to have a different font size and line height to maintain the\n// rhythm. $lines specifies how many multiples of the baseline rhythm each line\n// of this font should use up. It does not have to be an integer, but it\n// defaults to the smallest integer that is large enough to fit the font.\n// Use $from-size to adjust from a font-size other than the base font-size.\n@mixin adjust-font-size-to($to-size, $lines: lines-for-font-size($to-size), $from-size: $base-font-size) {\n @if not($relative-font-sizing) and $from-size != $base-font-size {\n @warn \"$relative-font-sizing is false but a relative font size was passed to adjust-font-size-to\";\n }\n font-size: $font-unit * $to-size / $from-size;\n @include adjust-leading-to($lines, if($relative-font-sizing, $to-size, $base-font-size));\n}\n\n// Adjust a block to have different line height to maintain the rhythm.\n// $lines specifies how many multiples of the baseline rhythm each line of this\n// font should use up. It does not have to be an integer, but it defaults to the\n// smallest integer that is large enough to fit the font.\n@mixin adjust-leading-to($lines, $font-size: $base-font-size) {\n line-height: rhythm($lines, $font-size);\n}\n\n// Calculate rhythm units.\n@function rhythm(\n $lines: 1,\n $font-size: $base-font-size,\n $offset: 0\n) {\n @if not($relative-font-sizing) and $font-size != $base-font-size {\n @warn \"$relative-font-sizing is false but a relative font size was passed to the rhythm function\";\n }\n $rhythm: $font-unit * ($lines * $base-line-height - $offset) / $font-size;\n // Round the pixels down to nearest integer.\n @if unit($rhythm) == px {\n $rhythm: floor($rhythm);\n }\n @return $rhythm;\n}\n\n// Calculate the minimum multiple of rhythm units needed to contain the font-size.\n@function lines-for-font-size($font-size) {\n $lines: if($round-to-nearest-half-line,\n ceil(2 * $font-size / $base-line-height) / 2,\n ceil($font-size / $base-line-height));\n @if $lines * $base-line-height - $font-size < $min-line-padding * 2 {\n $lines: $lines + if($round-to-nearest-half-line, 0.5, 1);\n }\n @return $lines;\n}\n\n// Apply leading whitespace. The $property can be margin or padding.\n@mixin leader($lines: 1, $font-size: $base-font-size, $property: margin) {\n #{$property}-top: rhythm($lines, $font-size);\n}\n\n// Apply leading whitespace as padding.\n@mixin padding-leader($lines: 1, $font-size: $base-font-size) {\n padding-top: rhythm($lines, $font-size);\n}\n\n// Apply leading whitespace as margin.\n@mixin margin-leader($lines: 1, $font-size: $base-font-size) {\n margin-top: rhythm($lines, $font-size);\n}\n\n// Apply trailing whitespace. The $property can be margin or padding.\n@mixin trailer($lines: 1, $font-size: $base-font-size, $property: margin) {\n #{$property}-bottom: rhythm($lines, $font-size);\n}\n\n// Apply trailing whitespace as padding.\n@mixin padding-trailer($lines: 1, $font-size: $base-font-size) {\n padding-bottom: rhythm($lines, $font-size);\n}\n\n// Apply trailing whitespace as margin.\n@mixin margin-trailer($lines: 1, $font-size: $base-font-size) {\n margin-bottom: rhythm($lines, $font-size);\n}\n\n// Shorthand mixin to apply whitespace for top and bottom margins and padding.\n@mixin rhythm($leader: 0, $padding-leader: 0, $padding-trailer: 0, $trailer: 0, $font-size: $base-font-size) {\n @include leader($leader, $font-size);\n @include padding-leader($padding-leader, $font-size);\n @include padding-trailer($padding-trailer, $font-size);\n @include trailer($trailer, $font-size);\n}\n\n// Apply a border and whitespace to any side without destroying the vertical\n// rhythm. The whitespace must be greater than the width of the border.\n@mixin apply-side-rhythm-border($side, $width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {\n @if not($relative-font-sizing) and $font-size != $base-font-size {\n @warn \"$relative-font-sizing is false but a relative font size was passed to apply-side-rhythm-border\";\n }\n border-#{$side}-style: $border-style;\n border-#{$side}-width: $font-unit * $width / $font-size;\n padding-#{$side}: rhythm($lines, $font-size, $offset: $width);\n}\n\n// Apply borders and whitespace equally to all sides.\n@mixin rhythm-borders($width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {\n @if not($relative-font-sizing) and $font-size != $base-font-size {\n @warn \"$relative-font-sizing is false but a relative font size was passed to rhythm-borders\";\n }\n border: {\n style: $border-style;\n width: $font-unit * $width / $font-size;\n };\n padding: rhythm($lines, $font-size, $offset: $width);\n}\n\n// Apply a leading border.\n@mixin leading-border($width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {\n @include apply-side-rhythm-border(top, $width, $lines, $font-size, $border-style);\n}\n\n// Apply a trailing border.\n@mixin trailing-border($width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {\n @include apply-side-rhythm-border(bottom, $width, $lines, $font-size, $border-style);\n}\n\n// Apply both leading and trailing borders.\n@mixin horizontal-borders($width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {\n @include leading-border($width, $lines, $font-size, $border-style);\n @include trailing-border($width, $lines, $font-size, $border-style);\n}\n\n// Alias for `horizontal-borders` mixin.\n@mixin h-borders($width: 1px, $lines: 1, $font-size: $base-font-size, $border-style: $default-rhythm-border-style) {\n @include horizontal-borders($width, $lines, $font-size, $border-style);\n}\n","@import \"../css3/images\";\n@import \"../css3/background-size\";\n\n// Set the color of your columns\n$grid-background-column-color : rgba(100, 100, 225, 0.25) !default;\n// Set the color of your gutters\n$grid-background-gutter-color : rgba(0, 0, 0, 0) !default;\n\n// Set the total number of columns in your grid\n$grid-background-total-columns : 24 !default;\n// Set the width of your columns\n$grid-background-column-width : 30px !default;\n// Set the width of your gutters\n$grid-background-gutter-width : 10px !default;\n// Set the offset, if your columns are padded in from the container edge\n$grid-background-offset : 0px !default;\n\n// Set the color of your baseline\n$grid-background-baseline-color : rgba(0, 0, 0, 0.5) !default;\n// Set the height of your baseline grid\n$grid-background-baseline-height : 1.5em !default;\n\n// toggle your columns grids on and off\n$show-column-grid-backgrounds : true !default;\n// toggle your vertical grids on and off\n$show-baseline-grid-backgrounds : true !default;\n// toggle all your grids on and off\n$show-grid-backgrounds : true !default;\n\n// optionally force your grid-image to remain fluid\n// no matter what units you used to declared your grid.\n$grid-background-force-fluid : false !default;\n\n\n// Create the gradient needed for baseline grids\n@function get-baseline-gradient(\n $color : $grid-background-baseline-color\n) {\n $gradient: linear-gradient(bottom, $color 5%, rgba($color,0) 5%);\n @return $gradient;\n}\n\n// Create the color-stops needed for horizontal grids\n@function build-grid-background(\n $total : $grid-background-total-columns,\n $column : $grid-background-column-width,\n $gutter : $grid-background-gutter-width,\n $offset : $grid-background-offset,\n $column-color : $grid-background-column-color,\n $gutter-color : $grid-background-gutter-color\n) {\n $grid: compact();\n $grid: append($grid, $gutter-color $offset, comma);\n @for $i from 0 to $total {\n\n // $a represents the start of this column, initially equal to the offset\n $a: $offset;\n @if $i > 0 { $a: $a + (($column + $gutter) * $i); }\n\n // $g represents the start of this gutter, equal to $a plus one column-width\n $g: $a + $column;\n\n // $z represents the end of a gutter, equal to $g plus one gutter-width\n $z: $g + $gutter;\n\n @if (unit($a) == \"%\") and ($i == ($total - 1)) {\n $z: 100%;\n }\n\n // and we add this column/gutter pair to our grid\n $grid: join($grid, ($column-color $a, $column-color $g, $gutter-color $g, $gutter-color $z));\n }\n\n @return $grid;\n}\n\n// Return the gradient needed for horizontal grids\n@function get-column-gradient(\n $total : $grid-background-total-columns,\n $column : $grid-background-column-width,\n $gutter : $grid-background-gutter-width,\n $offset : $grid-background-offset,\n $column-color : $grid-background-column-color,\n $gutter-color : $grid-background-gutter-color,\n $force-fluid : $grid-background-force-fluid\n) {\n $grid: unquote(\"\");\n\n // don't force fluid grids when they are already fluid.\n @if unit($column) == \"%\" { $force-fluid: false; }\n\n @if $force-fluid {\n $grid: get-column-fluid-grid($total,$column,$gutter,$offset,$column-color,$gutter-color);\n } @else {\n $grid: build-grid-background($total,$column,$gutter,$offset,$column-color,$gutter-color);\n }\n\n // return the horizontal grid as a gradient\n $gradient: linear-gradient(left, $grid);\n @return $gradient;\n}\n\n// Convert a grid from fixed units into percentages.\n@function get-column-fluid-grid(\n $total : $grid-background-total-columns,\n $column : $grid-background-column-width,\n $gutter : $grid-background-gutter-width,\n $offset : $grid-background-offset,\n $column-color : $grid-background-column-color,\n $gutter-color : $grid-background-gutter-color\n) {\n $context: ($column * $total) + ($gutter * ($total - 1) + ($offset * 2));\n $offset: $offset / $context * 100%;\n $column: $column / $context * 100%;\n $gutter: $gutter / $context * 100%;\n\n // return the horizontal grid as a set of color-stops\n $grid: build-grid-background($total,$column,$gutter,$offset,$column-color,$gutter-color);\n @return $grid;\n}\n\n\n// Add just the baseline grid to an element's background\n@mixin baseline-grid-background(\n $baseline : $grid-background-baseline-height,\n $color : $grid-background-baseline-color\n) {\n @if $show-grid-backgrounds and $show-baseline-grid-backgrounds {\n @include background-image(get-baseline-gradient($color));\n @include background-size(100% $baseline);\n background-position: left top;\n }\n}\n\n// Add just the horizontal grid to an element's background\n@mixin column-grid-background(\n $total : $grid-background-total-columns,\n $column : $grid-background-column-width,\n $gutter : $grid-background-gutter-width,\n $offset : $grid-background-offset,\n $column-color : $grid-background-column-color,\n $gutter-color : $grid-background-gutter-color,\n $force-fluid : $grid-background-force-fluid\n) {\n @if $show-grid-backgrounds and $show-column-grid-backgrounds {\n @include background-image(\n get-column-gradient($total,$column,$gutter,$offset,$column-color,$gutter-color, $force-fluid)\n );\n background-position: left top;\n }\n}\n\n// Add both horizontal and baseline grids to an element's background\n@mixin grid-background(\n $total : $grid-background-total-columns,\n $column : $grid-background-column-width,\n $gutter : $grid-background-gutter-width,\n $baseline : $grid-background-baseline-height,\n $offset : $grid-background-offset,\n $column-color : $grid-background-column-color,\n $gutter-color : $grid-background-gutter-color,\n $baseline-color : $grid-background-baseline-color,\n $force-fluid : $grid-background-force-fluid\n) {\n @if $show-grid-backgrounds {\n @if $show-baseline-grid-backgrounds and $show-column-grid-backgrounds {\n @include background-image(\n get-baseline-gradient($baseline-color),\n get-column-gradient($total,$column,$gutter,$offset,$column-color,$gutter-color, $force-fluid)\n );\n @include background-size(100% $baseline, auto);\n background-position: left top;\n } @else {\n @include baseline-grid-background($baseline, $baseline-color);\n @include column-grid-background($total,$column,$gutter,$offset,$column-color,$gutter-color, $force-fluid);\n }\n }\n}\n","@import \"shared\";\n@import \"../utilities/general/hacks\";\n@import \"../functions\";\n\n// Background property support for vendor prefixing within values.\n@mixin background(\n $background-1,\n $background-2: false,\n $background-3: false,\n $background-4: false,\n $background-5: false,\n $background-6: false,\n $background-7: false,\n $background-8: false,\n $background-9: false,\n $background-10: false\n) {\n $backgrounds: compact($background-1, $background-2, $background-3, $background-4, $background-5,\n $background-6, $background-7, $background-8, $background-9, $background-10);\n $mult-bgs: -compass-list-size($backgrounds) > 1;\n $add-pie-bg: prefixed(-pie, $backgrounds) or $mult-bgs;\n @if $experimental-support-for-svg and prefixed(-svg, $backgrounds) { background: -svg($backgrounds); }\n @if $support-for-original-webkit-gradients and prefixed(-owg, $backgrounds) { background: -owg($backgrounds); }\n @if $experimental-support-for-webkit and prefixed(-webkit, $backgrounds) { background: -webkit($backgrounds); }\n @if $experimental-support-for-mozilla and prefixed(-moz, $backgrounds) { background: -moz($backgrounds); }\n @if $experimental-support-for-opera and prefixed(-o, $backgrounds) { background: -o($backgrounds); }\n @if $experimental-support-for-pie and $add-pie-bg { -pie-background: -pie($backgrounds); }\n background: $backgrounds ;\n}\n\n@mixin background-with-css2-fallback(\n $background-1,\n $background-2: false,\n $background-3: false,\n $background-4: false,\n $background-5: false,\n $background-6: false,\n $background-7: false,\n $background-8: false,\n $background-9: false,\n $background-10: false\n) {\n $backgrounds: compact($background-1, $background-2, $background-3, $background-4, $background-5,\n $background-6, $background-7, $background-8, $background-9, $background-10);\n $mult-bgs: -compass-list-size($backgrounds) > 1;\n $simple-background: if($mult-bgs or prefixed(-css2, $backgrounds), -css2(-compass-nth($backgrounds, last)), false);\n @if not(blank($simple-background)) { background: $simple-background; }\n @include background($background-1, $background-2, $background-3, $background-4, $background-5,\n $background-6, $background-7, $background-8, $background-9, $background-10);\n}\n\n\n// Background image property support for vendor prefixing within values.\n@mixin background-image(\n $image-1,\n $image-2: false,\n $image-3: false,\n $image-4: false,\n $image-5: false,\n $image-6: false,\n $image-7: false,\n $image-8: false,\n $image-9: false,\n $image-10: false\n) {\n $images: compact($image-1, $image-2, $image-3, $image-4, $image-5, $image-6, $image-7, $image-8, $image-9, $image-10);\n $add-pie-bg: prefixed(-pie, $images) or -compass-list-size($images) > 1;\n\n @if $experimental-support-for-svg and prefixed(-svg, $images) { background-image: -svg($images); background-size: 100%; }\n @if $support-for-original-webkit-gradients and prefixed(-owg, $images) { background-image: -owg($images); }\n @if $experimental-support-for-webkit and prefixed(-webkit, $images) { background-image: -webkit($images); }\n @if $experimental-support-for-mozilla and prefixed(-moz, $images) { background-image: -moz($images); }\n @if $experimental-support-for-opera and prefixed(-o, $images) { background-image: -o($images); }\n @if $experimental-support-for-pie and $add-pie-bg { @warn \"PIE does not support background-image. Use @include background(#{$images}) instead.\" }\n background-image: $images ;\n}\n\n// Emit a IE-Specific filters that renders a simple linear gradient.\n// For use in IE 6 - 8. Best practice would have you apply this via a\n// conditional IE stylesheet, but if you must, you should place this before\n// any background-image properties that you have specified.\n//\n// For the `$orientation` parameter, you can pass `vertical` or `horizontal`.\n@mixin filter-gradient($start-color, $end-color, $orientation: vertical) {\n @include has-layout;\n $gradient-type: if($orientation == vertical, 0, 1);\n @if $legacy-support-for-ie6 or $legacy-support-for-ie7 or $legacy-support-for-ie8 {\n filter: progid:DXImageTransform.Microsoft.gradient(gradientType=#{$gradient-type}, startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}');\n }\n}\n\n\n// Border image property support for vendor prefixing properties and values.\n@mixin border-image($value) {\n @if $experimental-support-for-mozilla { -moz-border-image: -moz(reject(-compass-list($value), fill)); }\n @if $support-for-original-webkit-gradients { -webkit-border-image: -owg(reject(-compass-list($value), fill)); }\n @if $experimental-support-for-webkit { -webkit-border-image: -webkit(reject(-compass-list($value), fill)); }\n @if $experimental-support-for-opera { -o-border-image: -o(reject(-compass-list($value), fill)); }\n @if $experimental-support-for-svg { border-image: -svg(reject(-compass-list($value), fill)); }\n border-image: $value;\n}\n\n// List style image property support for vendor prefixing within values.\n@mixin list-style-image($image) {\n @if $experimental-support-for-mozilla and prefixed(-moz, $image) { list-style-image: -moz($image); }\n @if $support-for-original-webkit-gradients and prefixed(-owg, $image) { list-style-image: -owg($image); }\n @if $experimental-support-for-webkit and prefixed(-webkit, $image) { list-style-image: -webkit($image); }\n @if $experimental-support-for-opera and prefixed(-o, $image) { list-style-image: -o($image); }\n @if $experimental-support-for-svg and prefixed(-svg, $image) { list-style-image: -svg($image); }\n list-style-image: $image ;\n}\n\n// List style property support for vendor prefixing within values.\n@mixin list-style($value) {\n $value: -compass-list($value);\n @if $experimental-support-for-mozilla and prefixed(-moz, $value) { list-style-image: -moz($value); }\n @if $support-for-original-webkit-gradients and prefixed(-owg, $value) { list-style-image: -owg($value); }\n @if $experimental-support-for-webkit and prefixed(-webkit, $value) { list-style-image: -webkit($value); }\n @if $experimental-support-for-opera and prefixed(-o, $value) { list-style-image: -o($value); }\n @if $experimental-support-for-svg and prefixed(-svg, $value) { list-style-image: -svg($value); }\n list-style-image: $value ;\n}\n\n// content property support for vendor prefixing within values.\n@mixin content($value) {\n $value: -compass-list($value);\n @if $experimental-support-for-mozilla and prefixed(-moz, $value) { content: -moz($value); }\n @if $support-for-original-webkit-gradients and prefixed(-owg, $value) { content: -owg($value); }\n @if $experimental-support-for-webkit and prefixed(-webkit, $value) { content: -webkit($value); }\n @if $experimental-support-for-opera and prefixed(-o, $value) { content: -o($value); }\n @if $experimental-support-for-svg and prefixed(-svg, $value) { content: -svg($value); }\n content: $value ;\n}\n","@import \"shared\";\n\n// override to change the default\n$default-background-size: 100% auto !default;\n\n// Set the size of background images using px, width and height, or percentages.\n// Currently supported in: Opera, Gecko, Webkit.\n//\n// * percentages are relative to the background-origin (default = padding-box)\n// * mixin defaults to: `$default-background-size`\n@mixin background-size(\n $size-1: $default-background-size,\n $size-2: false,\n $size-3: false,\n $size-4: false,\n $size-5: false,\n $size-6: false,\n $size-7: false,\n $size-8: false,\n $size-9: false,\n $size-10: false\n) {\n $size-1: if(type-of($size-1) == string, unquote($size-1), $size-1);\n $sizes: compact($size-1, $size-2, $size-3, $size-4, $size-5, $size-6, $size-7, $size-8, $size-9, $size-10);\n @include experimental(background-size, $sizes, -moz, -webkit, -o, not(-ms), not(-khtml));\n}\n","@import \"css3/border-radius\";\n@import \"css3/inline-block\";\n@import \"css3/opacity\";\n@import \"css3/box-shadow\";\n@import \"css3/text-shadow\";\n@import \"css3/columns\";\n@import \"css3/box-sizing\";\n@import \"css3/box\";\n@import \"css3/images\";\n@import \"css3/background-clip\";\n@import \"css3/background-origin\";\n@import \"css3/background-size\";\n@import \"css3/font-face\";\n@import \"css3/transform\";\n@import \"css3/transition\";\n@import \"css3/appearance\";\n@import \"css3/regions\";\n@import \"css3/hyphenation\";\n@import \"css3/filter\";\n@import \"css3/pie\";\n@import \"css3/user-interface\";\n@import \"css3/flexbox\";","@import \"shared\";\n\n$default-border-radius: 5px !default;\n\n// Round all corners by a specific amount, defaults to value of `$default-border-radius`.\n//\n// When two values are passed, the first is the horizontal radius\n// and the second is the vertical radius.\n//\n// Note: webkit does not support shorthand syntax for several corners at once.\n// So in the case where you pass several values only the first will be passed to webkit.\n//\n// Examples:\n//\n// .simple { @include border-radius(4px, 4px); }\n// .compound { @include border-radius(2px 5px, 3px 6px); }\n// .crazy { @include border-radius(1px 3px 5px 7px, 2px 4px 6px 8px)}\n//\n// Which generates:\n//\n// .simple {\n// -webkit-border-radius: 4px 4px;\n// -moz-border-radius: 4px / 4px;\n// -khtml-border-radius: 4px / 4px;\n// border-radius: 4px / 4px; }\n// \n// .compound {\n// -webkit-border-radius: 2px 3px;\n// -moz-border-radius: 2px 5px / 3px 6px;\n// -khtml-border-radius: 2px 5px / 3px 6px;\n// border-radius: 2px 5px / 3px 6px; }\n// \n// .crazy {\n// -webkit-border-radius: 1px 2px;\n// -moz-border-radius: 1px 3px 5px 7px / 2px 4px 6px 8px;\n// -khtml-border-radius: 1px 3px 5px 7px / 2px 4px 6px 8px;\n// border-radius: 1px 3px 5px 7px / 2px 4px 6px 8px; }\n\n@mixin border-radius($radius: $default-border-radius, $vertical-radius: false) {\n\n @if $vertical-radius {\n // Webkit doesn't understand the official shorthand syntax for specifying\n // a vertical radius unless so in case there's several we only take the first.\n @include experimental(border-radius, first-value-of($radius) first-value-of($vertical-radius),\n not(-moz),\n -webkit,\n not(-o),\n not(-ms),\n not(-khtml),\n not(official)\n );\n @include experimental(\"border-radius\", $radius unquote(\"/\") $vertical-radius,\n -moz,\n not(-webkit),\n not(-o),\n not(-ms),\n -khtml,\n official\n );\n }\n @else {\n @include experimental(border-radius, $radius);\n }\n}\n\n// Round radius at position by amount.\n//\n// * legal values for `$vert`: `top`, `bottom`\n// * legal values for `$horz`: `left`, `right`\n\n@mixin border-corner-radius($vert, $horz, $radius: $default-border-radius) {\n // Support for mozilla's syntax for specifying a corner\n @include experimental(\"border-radius-#{$vert}#{$horz}\", $radius,\n -moz,\n not(-webkit),\n not(-o),\n not(-ms),\n not(-khtml),\n not(official)\n );\n @include experimental(\"border-#{$vert}-#{$horz}-radius\", $radius,\n not(-moz),\n -webkit,\n not(-o),\n not(-ms),\n -khtml,\n official\n );\n \n}\n\n// Round top-left corner only\n\n@mixin border-top-left-radius($radius: $default-border-radius) {\n @include border-corner-radius(top, left, $radius); }\n\n// Round top-right corner only\n\n@mixin border-top-right-radius($radius: $default-border-radius) {\n @include border-corner-radius(top, right, $radius); }\n\n// Round bottom-left corner only\n\n@mixin border-bottom-left-radius($radius: $default-border-radius) {\n @include border-corner-radius(bottom, left, $radius); }\n\n// Round bottom-right corner only\n\n@mixin border-bottom-right-radius($radius: $default-border-radius) {\n @include border-corner-radius(bottom, right, $radius); }\n\n// Round both top corners by amount\n@mixin border-top-radius($radius: $default-border-radius) {\n @include border-top-left-radius($radius);\n @include border-top-right-radius($radius); }\n\n// Round both right corners by amount\n@mixin border-right-radius($radius: $default-border-radius) {\n @include border-top-right-radius($radius);\n @include border-bottom-right-radius($radius); }\n\n// Round both bottom corners by amount\n@mixin border-bottom-radius($radius: $default-border-radius) {\n @include border-bottom-left-radius($radius);\n @include border-bottom-right-radius($radius); }\n\n// Round both left corners by amount\n@mixin border-left-radius($radius: $default-border-radius) {\n @include border-top-left-radius($radius);\n @include border-bottom-left-radius($radius); }\n","@import \"shared\";\n\n// Provides cross-browser CSS opacity. Takes a number between 0 and 1 as the argument, e.g. 0.5 for 50% opacity.\n//\n// @param $opacity\n// A number between 0 and 1, where 0 is transparent and 1 is opaque.\n\n@mixin opacity($opacity) {\n @if $legacy-support-for-ie6 or $legacy-support-for-ie7 or $legacy-support-for-ie8 {\n filter: unquote(\"progid:DXImageTransform.Microsoft.Alpha(Opacity=#{round($opacity * 100)})\");\n }\n opacity: $opacity;\n}\n\n// Make an element completely transparent.\n@mixin transparent { @include opacity(0); }\n\n// Make an element completely opaque.\n@mixin opaque { @include opacity(1); }\n","// @doc off\n// These defaults make the arguments optional for this mixin\n// If you like, set different defaults before importing.\n// @doc on\n\n@import \"shared\";\n\n\n// The default color for box shadows\n$default-box-shadow-color: #333333 !default;\n\n// The default horizontal offset. Positive is to the right.\n$default-box-shadow-h-offset: 0px !default;\n\n// The default vertical offset. Positive is down.\n$default-box-shadow-v-offset: 0px !default;\n\n// The default blur length.\n$default-box-shadow-blur: 5px !default;\n\n// The default spread length.\n$default-box-shadow-spread : false !default;\n\n// The default shadow inset: inset or false (for standard shadow).\n$default-box-shadow-inset : false !default;\n\n// Provides cross-browser for Webkit, Gecko, and CSS3 box shadows when one or more box\n// shadows are needed.\n// Each shadow argument should adhere to the standard css3 syntax for the\n// box-shadow property.\n@mixin box-shadow(\n $shadow-1 : default,\n $shadow-2 : false,\n $shadow-3 : false,\n $shadow-4 : false,\n $shadow-5 : false,\n $shadow-6 : false,\n $shadow-7 : false,\n $shadow-8 : false,\n $shadow-9 : false,\n $shadow-10: false\n) {\n @if $shadow-1 == default {\n $shadow-1 : -compass-space-list(compact(if($default-box-shadow-inset, inset, false), $default-box-shadow-h-offset, $default-box-shadow-v-offset, $default-box-shadow-blur, $default-box-shadow-spread, $default-box-shadow-color));\n }\n $shadow : compact($shadow-1, $shadow-2, $shadow-3, $shadow-4, $shadow-5, $shadow-6, $shadow-7, $shadow-8, $shadow-9, $shadow-10);\n @include experimental(box-shadow, $shadow,\n -moz, -webkit, not(-o), not(-ms), not(-khtml), official\n );\n}\n\n// Provides a single cross-browser CSS box shadow for Webkit, Gecko, and CSS3.\n// Includes default arguments for horizontal offset, vertical offset, blur length, spread length, color and inset.\n@mixin single-box-shadow(\n $hoff : $default-box-shadow-h-offset,\n $voff : $default-box-shadow-v-offset,\n $blur : $default-box-shadow-blur,\n $spread : $default-box-shadow-spread,\n $color : $default-box-shadow-color,\n $inset : $default-box-shadow-inset\n) {\n @if not ($inset == true or $inset == false or $inset == inset) {\n @warn \"$inset expected to be true or the inset keyword. Got #{$inset} instead. Using: inset\";\n }\n\n @if $color == none {\n @include box-shadow(none);\n } @else {\n $full : $hoff $voff;\n @if $blur { $full: $full $blur; }\n @if $spread { $full: $full $spread; }\n @if $color { $full: $full $color; }\n @if $inset { $full: inset $full; }\n @include box-shadow($full);\n }\n}\n","@import \"shared\";\n\n// These defaults make the arguments optional for this mixin\n// If you like, set different defaults in your project\n\n$default-text-shadow-color: #aaa !default;\n$default-text-shadow-h-offset: 0px !default;\n$default-text-shadow-v-offset: 0px !default;\n$default-text-shadow-blur: 1px !default;\n$default-text-shadow-spread: false !default;\n\n// Provides cross-browser text shadows when one or more shadows are needed.\n// Each shadow argument should adhere to the standard css3 syntax for the\n// text-shadow property.\n//\n// Note: if any shadow has a spread parameter, this will cause the mixin\n// to emit the shadow declaration twice, first without the spread,\n// then with the spread included. This allows you to progressively\n// enhance the browsers that do support the spread parameter.\n@mixin text-shadow(\n $shadow-1 : default,\n $shadow-2 : false,\n $shadow-3 : false,\n $shadow-4 : false,\n $shadow-5 : false,\n $shadow-6 : false,\n $shadow-7 : false,\n $shadow-8 : false,\n $shadow-9 : false,\n $shadow-10: false\n) {\n @if $shadow-1 == default {\n $shadow-1: compact($default-text-shadow-h-offset $default-text-shadow-v-offset $default-text-shadow-blur $default-text-shadow-spread $default-text-shadow-color);\n }\n $shadows-without-spread: join((),(),comma);\n $shadows: join((),(),comma);\n $has-spread: false;\n @each $shadow in compact($shadow-1, $shadow-2, $shadow-3, $shadow-4, $shadow-5,\n $shadow-6, $shadow-7, $shadow-8, $shadow-9, $shadow-10) {\n @if length($shadow) > 4 {\n $has-spread: true;\n $shadows-without-spread: append($shadows-without-spread, nth($shadow,1) nth($shadow,2) nth($shadow,3) nth($shadow,5));\n $shadows: append($shadows, $shadow);\n } else {\n $shadows-without-spread: append($shadows-without-spread, $shadow);\n $shadows: append($shadows, $shadow);\n }\n }\n @if $has-spread {\n text-shadow: $shadows-without-spread;\n }\n text-shadow: $shadows;\n}\n\n// Provides a single cross-browser CSS text shadow.\n//\n// Provides sensible defaults for the color, horizontal offset, vertical offset, blur, and spread\n// according to the configuration defaults above.\n@mixin single-text-shadow(\n $hoff: false,\n $voff: false,\n $blur: false,\n $spread: false,\n $color: false\n) {\n // A lot of people think the color comes first. It doesn't.\n @if type-of($hoff) == color {\n $temp-color: $hoff;\n $hoff: $voff;\n $voff: $blur;\n $blur: $spread;\n $spread: $color;\n $color: $temp-color;\n }\n // Can't rely on default assignment with multiple supported argument orders.\n $hoff: if($hoff, $hoff, $default-text-shadow-h-offset);\n $voff: if($voff, $voff, $default-text-shadow-v-offset);\n $blur: if($blur, $blur, $default-text-shadow-blur );\n $spread: if($spread, $spread, $default-text-shadow-spread );\n $color: if($color, $color, $default-text-shadow-color );\n // We don't need experimental support for this property.\n @if $color == none or $hoff == none {\n @include text-shadow(none);\n } @else {\n @include text-shadow(compact($hoff $voff $blur $spread $color));\n }\n}\n","@import \"shared\";\n\n// Specify the shorthand `columns` property.\n//\n// Example:\n//\n// @include columns(20em 2)\n@mixin columns($width-and-count) {\n @include experimental(columns, $width-and-count,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Specify the number of columns\n@mixin column-count($count) {\n @include experimental(column-count, $count,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Specify the gap between columns e.g. `20px`\n@mixin column-gap($width) {\n @include experimental(column-gap, $width,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Specify the width of columns e.g. `100px`\n@mixin column-width($width) {\n @include experimental(column-width, $width,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Specify the width of the rule between columns e.g. `1px`\n@mixin column-rule-width($width) {\n @include experimental(column-rule-width, $width,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Specify the style of the rule between columns e.g. `dotted`.\n// This works like border-style.\n@mixin column-rule-style($style) {\n @include experimental(column-rule-style, unquote($style),\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Specify the color of the rule between columns e.g. `blue`.\n// This works like border-color.\n@mixin column-rule-color($color) {\n @include experimental(column-rule-color, $color,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Mixin encompassing all column rule properties\n// For example:\n//\n// @include column-rule(1px, solid, #c00)\n//\n// Or the values can be space separated:\n//\n// @include column-rule(1px solid #c00)\n@mixin column-rule($width, $style: false, $color: false) {\n $full : -compass-space-list(compact($width, $style, $color));\n @include experimental(column-rule, $full,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Mixin for setting column-break-before\n//\n// * legal values are auto, always, avoid, left, right, page, column, avoid-page, avoid-column\n//\n// Example: \n// h2.before {@include column-break-before(always);}\n//\n// Which generates: \n//\n// h2.before { \n// -webkit-column-break-before: always;\n// column-break-before: always;}\n@mixin column-break-before($value: auto){\n @include experimental(column-break-before, $value, not(-moz), -webkit, not(-o), not(-ms), not(-khtml), official );\n}\n\n// Mixin for setting column-break-after\n//\n// * legal values are auto, always, avoid, left, right, page, column, avoid-page, avoid-column\n//\n// Example: \n// h2.after {@include column-break-after(always); }\n//\n// Which generates: \n//\n// h2.after {\n// -webkit-column-break-after: always;\n// column-break-after: always; }\n@mixin column-break-after($value: auto){\n @include experimental(column-break-after, $value, not(-moz), -webkit, not(-o), not(-ms), not(-khtml), official );\n}\n\n// Mixin for setting column-break-inside\n//\n// * legal values are auto, avoid, avoid-page, avoid-column\n//\n// Example: \n// h2.inside {@include column-break-inside();}\n// Which generates: \n// \n// h2.inside {\n// -webkit-column-break-inside: auto;\n// column-break-inside: auto;}\n@mixin column-break-inside($value: auto){\n @include experimental(column-break-inside, $value, not(-moz), -webkit, not(-o), not(-ms), not(-khtml), official );\n}\n\n// All-purpose mixin for setting column breaks.\n//\n// * legal values for $type : before, after, inside \n// * legal values for '$value' are dependent on $type\n// * when $type = before, legal values are auto, always, avoid, left, right, page, column, avoid-page, avoid-column\n// * when $type = after, legal values are auto, always, avoid, left, right, page, column, avoid-page, avoid-column\n// * when $type = inside, legal values are auto, avoid, avoid-page, avoid-column\n// \n// Examples: \n// h2.before {@include column-break(before, always);}\n// h2.after {@include column-break(after, always); }\n// h2.inside {@include column-break(inside); }\n//\n// Which generates: \n// h2.before { \n// -webkit-column-break-before: always;\n// column-break-before: always;}\n// \n// h2.after {\n// -webkit-column-break-after: always;\n// column-break-after: always; }\n//\n// h2.inside {\n// -webkit-column-break-inside: auto;\n// column-break-inside: auto;}\n \n@mixin column-break($type: before, $value: auto){\n @include experimental(\"column-break-#{$type}\", $value, not(-moz), -webkit, not(-o), not(-ms), not(-khtml), official );\n}","@import \"shared\";\n\n// Change the box model for Mozilla, Webkit, IE8 and the future\n//\n// @param $bs\n// [ content-box | border-box ]\n\n@mixin box-sizing($bs) {\n $bs: unquote($bs);\n @include experimental(box-sizing, $bs,\n -moz, -webkit, not(-o), not(-ms), not(-khtml), official\n );\n}\n","@import \"shared\";\n\n// display:box; must be used for any of the other flexbox mixins to work properly\n@mixin display-box {\n @include experimental-value(display, box,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}\n\n// Default box orientation, assuming that the user wants something less block-like\n$default-box-orient: horizontal !default;\n\n// Box orientation [ horizontal | vertical | inline-axis | block-axis | inherit ]\n@mixin box-orient(\n $orientation: $default-box-orient\n) {\n $orientation : unquote($orientation);\n @include experimental(box-orient, $orientation,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}\n\n// Default box-align\n$default-box-align: stretch !default;\n\n// Box align [ start | end | center | baseline | stretch ]\n@mixin box-align(\n $alignment: $default-box-align\n) {\n $alignment : unquote($alignment);\n @include experimental(box-align, $alignment,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}\n\n// Default box flex\n$default-box-flex: 0 !default;\n\n// mixin which takes an int argument for box flex. Apply this to the children inside the box.\n//\n// For example: \"div.display-box > div.child-box\" would get the box flex mixin.\n@mixin box-flex(\n $flex: $default-box-flex\n) {\n @include experimental(box-flex, $flex,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}\n\n// Default flex group\n$default-box-flex-group: 1 !default;\n\n// mixin which takes an int argument for flexible grouping\n@mixin box-flex-group(\n $group: $default-box-flex-group\n) {\n @include experimental(box-flex-group, $group,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}\n\n// default for ordinal group\n$default-box-ordinal-group: 1 !default;\n\n// mixin which takes an int argument for ordinal grouping and rearranging the order\n@mixin box-ordinal-group(\n $group: $default-ordinal-flex-group\n) {\n @include experimental(box-ordinal-group, $group,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}\n\n// Box direction default value\n$default-box-direction: normal !default;\n\n// mixin for box-direction [ normal | reverse | inherit ]\n@mixin box-direction(\n $direction: $default-box-direction\n) {\n $direction: unquote($direction);\n @include experimental(box-direction, $direction,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}\n\n// default for box lines\n$default-box-lines: single !default;\n\n// mixin for box lines [ single | multiple ]\n@mixin box-lines(\n $lines: $default-box-lines\n) {\n $lines: unquote($lines);\n @include experimental(box-lines, $lines,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}\n\n// default for box pack\n$default-box-pack: start !default;\n\n// mixin for box pack [ start | end | center | justify ]\n@mixin box-pack(\n $pack: $default-box-pack\n) {\n $pack: unquote($pack);\n @include experimental(box-pack, $pack,\n -moz, -webkit, not(-o), -ms, not(-khtml), official\n );\n}","@import \"shared\";\n\n// The default value is `padding-box` -- the box model used by modern browsers.\n//\n// If you wish to do so, you can override the default constant with `border-box`\n//\n// To override to the default border-box model, use this code:\n// $default-background-clip: border-box\n\n$default-background-clip: padding-box !default;\n\n// Clip the background (image and color) at the edge of the padding or border.\n//\n// Legal Values:\n//\n// * padding-box\n// * border-box\n// * text\n\n@mixin background-clip($clip: $default-background-clip) {\n // webkit and mozilla use the deprecated short [border | padding]\n $clip: unquote($clip);\n $deprecated: $clip;\n @if $clip == padding-box { $deprecated: padding; }\n @if $clip == border-box { $deprecated: border; }\n // Support for webkit and mozilla's use of the deprecated short form\n @include experimental(background-clip, $deprecated,\n -moz,\n -webkit,\n not(-o),\n not(-ms),\n not(-khtml),\n not official\n );\n @include experimental(background-clip, $clip,\n not(-moz),\n not(-webkit),\n not(-o),\n not(-ms),\n -khtml,\n official\n );\n}\n","// Override `$default-background-origin` to change the default.\n\n@import \"shared\";\n\n$default-background-origin: content-box !default;\n\n// Position the background off the edge of the padding, border or content\n//\n// * Possible values:\n// * `padding-box`\n// * `border-box`\n// * `content-box`\n// * browser defaults to `padding-box`\n// * mixin defaults to `content-box`\n\n\n@mixin background-origin($origin: $default-background-origin) {\n $origin: unquote($origin);\n // webkit and mozilla use the deprecated short [border | padding | content]\n $deprecated: $origin;\n @if $origin == padding-box { $deprecated: padding; }\n @if $origin == border-box { $deprecated: border; }\n @if $origin == content-box { $deprecated: content; }\n\n // Support for webkit and mozilla's use of the deprecated short form\n @include experimental(background-origin, $deprecated,\n -moz,\n -webkit,\n not(-o),\n not(-ms),\n not(-khtml),\n not official\n );\n @include experimental(background-origin, $origin,\n not(-moz),\n not(-webkit),\n -o,\n -ms,\n -khtml,\n official\n );\n}\n","@import \"shared\";\n\n// Cross-browser support for @font-face. Supports IE, Gecko, Webkit, Opera.\n//\n// * $name is required, arbitrary, and what you will use in font stacks.\n// * $font-files is required using font-files('relative/location', 'format').\n// for best results use this order: woff, opentype/truetype, svg\n// * $eot is required by IE, and is a relative location of the eot file.\n// * $weight shows if the font is bold, defaults to normal\n// * $style defaults to normal, might be also italic\n// * For android 2.2 Compatiblity, please ensure that your web page has\n// a meta viewport tag.\n// * To support iOS < 4.2, an SVG file must be provided\n//\n// If you need to generate other formats check out the Font Squirrel\n// [font generator](http://www.fontsquirrel.com/fontface/generator)\n//\n\n// In order to refer to a specific style of the font in your stylesheets as \n// e.g. \"font-style: italic;\", you may add a couple of @font-face includes\n// containing the respective font files for each style and specying\n// respective the $style parameter.\n\n// Order of the includes matters, and it is: normal, bold, italic, bold+italic.\n\n@mixin font-face(\n $name, \n $font-files, \n $eot: false,\n $weight: false,\n $style: false\n) {\n $iefont: unquote(\"#{$eot}?#iefix\");\n @font-face {\n font-family: quote($name);\n @if $eot {\n src: font-url($eot);\n $font-files: font-url($iefont) unquote(\"format('eot')\"), $font-files; \n }\n src: $font-files;\n @if $weight {\n font-weight: $weight;\n }\n @if $style {\n font-style: $style;\n }\n }\n}\n","@import \"shared\";\n\n// @doc off\n// Note ----------------------------------------------------------------------\n// Safari, Chrome, and Firefox all support 3D transforms. However,\n// only in the most recent builds. You should also provide fallback 2d support for\n// Opera and IE. IE10 is slated to have 3d enabled, but is currently unreleased.\n// To make that easy, all 2D transforms include an browser-targeting toggle ($only3d)\n// to switch between the two support lists. The toggle defaults to 'false' (2D),\n// and also accepts 'true' (3D). Currently the lists are as follows:\n// 2D: Mozilla, Webkit, Opera, Official\n// 3D: Webkit, Firefox.\n\n// Available Transforms ------------------------------------------------------\n// - Scale (2d and 3d)\n// - Rotate (2d and 3d)\n// - Translate (2d and 3d)\n// - Skew (2d only)\n\n// Transform Parameters ------------------------------------------------------\n// - Transform Origin (2d and 3d)\n// - Perspective (3d)\n// - Perspective Origin (3d)\n// - Transform Style (3d)\n// - Backface Visibility (3d)\n\n// Mixins --------------------------------------------------------------------\n// transform-origin\n// - shortcuts: transform-origin2d, transform-origin3d\n// - helpers: apply-origin\n// transform\n// - shortcuts: transform2d, transform3d\n// - helpers: simple-transform, create-transform\n// perspective\n// - helpers: perspective-origin\n// transform-style\n// backface-visibility\n// scale\n// - shortcuts: scaleX, scaleY, scaleZ, scale3d\n// rotate\n// - shortcuts: rotateX, rotateY, rotate3d\n// translate\n// - shortcuts: translateX, translateY, translateZ, translate3d\n// skew\n// - shortcuts: skewX, skewY\n\n// Defaults ------------------------------------------------------------------\n// @doc on\n\n// The default x-origin for transforms\n$default-origin-x : 50% !default;\n// The default y-origin for transforms\n$default-origin-y : 50% !default;\n// The default z-origin for transforms\n$default-origin-z : 50% !default;\n\n\n// The default x-multiplier for scaling\n$default-scale-x : 1.25 !default;\n// The default y-multiplier for scaling\n$default-scale-y : $default-scale-x !default;\n// The default z-multiplier for scaling\n$default-scale-z : $default-scale-x !default;\n\n\n// The default angle for rotations\n$default-rotate : 45deg !default;\n\n\n// The default x-vector for the axis of 3d rotations\n$default-vector-x : 1 !default;\n// The default y-vector for the axis of 3d rotations\n$default-vector-y : 1 !default;\n// The default z-vector for the axis of 3d rotations\n$default-vector-z : 1 !default;\n\n\n// The default x-length for translations\n$default-translate-x : 1em !default;\n// The default y-length for translations\n$default-translate-y : $default-translate-x !default;\n// The default z-length for translations\n$default-translate-z : $default-translate-x !default;\n\n\n// The default x-angle for skewing\n$default-skew-x : 5deg !default;\n// The default y-angle for skewing\n$default-skew-y : 5deg !default;\n\n\n// **Transform-origin**\n// Transform-origin sent as a complete string\n//\n// @include apply-origin( origin [, 3D-only ] )\n//\n// where 'origin' is a space separated list containing 1-3 (x/y/z) coordinates\n// in percentages, absolute (px, cm, in, em etc..) or relative\n// (left, top, right, bottom, center) units\n//\n// @param only3d Set this to true to only apply this\n// mixin where browsers have 3D support.\n@mixin apply-origin($origin, $only3d) {\n $only3d: $only3d or -compass-list-size(-compass-list($origin)) > 2;\n @if $only3d {\n @include experimental(transform-origin, $origin,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n } @else {\n @include experimental(transform-origin, $origin,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n }\n}\n\n// Transform-origin sent as individual arguments:\n//\n// @include transform-origin( [ origin-x, origin-y, origin-z, 3D-only ] )\n//\n// where the 3 'origin-' arguments represent x/y/z coordinates.\n//\n// **NOTE:** setting z coordinates triggers 3D support list, leave false for 2D support\n@mixin transform-origin(\n $origin-x: $default-origin-x,\n $origin-y: $default-origin-y,\n $origin-z: false,\n $only3d: if($origin-z, true, false)\n) {\n $origin: unquote('');\n @if $origin-x or $origin-y or $origin-z {\n @if $origin-x { $origin: $origin-x; } @else { $origin: 50%; }\n @if $origin-y { $origin: $origin $origin-y; } @else { @if $origin-z { $origin: $origin 50%; }}\n @if $origin-z { $origin: $origin $origin-z; }\n @include apply-origin($origin, $only3d);\n }\n}\n\n\n// Transform sent as a complete string:\n//\n// @include transform( transforms [, 3D-only ] )\n//\n// where 'transforms' is a space separated list of all the transforms to be applied.\n@mixin transform(\n $transform,\n $only3d: false\n) {\n @if $only3d {\n @include experimental(transform, $transform,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n } @else {\n @include experimental(transform, $transform,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n }\n}\n\n// Shortcut to target all browsers with 2D transform support\n@mixin transform2d($trans) {\n @include transform($trans, false);\n}\n\n// Shortcut to target only browsers with 3D transform support\n@mixin transform3d($trans) {\n @include transform($trans, true);\n}\n\n// @doc off\n// 3D Parameters -------------------------------------------------------------\n// @doc on\n\n// Set the perspective of 3D transforms on the children of an element:\n//\n// @include perspective( perspective )\n//\n// where 'perspective' is a unitless number representing the depth of the\n// z-axis. The higher the perspective, the more exaggerated the foreshortening.\n// values from 500 to 1000 are more-or-less \"normal\" - a good starting-point.\n@mixin perspective($p) {\n @include experimental(perspective, $p,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Set the origin position for the perspective\n//\n// @include perspective-origin(origin-x [origin-y])\n//\n// where the two arguments represent x/y coordinates\n@mixin perspective-origin($origin: 50%) {\n @include experimental(perspective-origin, $origin,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Determine whether a 3D objects children also live in the given 3D space\n//\n// @include transform-style( [ style ] )\n//\n// where `style` can be either `flat` or `preserve-3d`.\n// Browsers default to `flat`, mixin defaults to `preserve-3d`.\n@mixin transform-style($style: preserve-3d) {\n @include experimental(transform-style, $style,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// Determine the visibility of an element when it's back is turned\n//\n// @include backface-visibility( [ visibility ] )\n//\n// where `visibility` can be either `visible` or `hidden`.\n// Browsers default to visible, mixin defaults to hidden\n@mixin backface-visibility($visibility: hidden) {\n @include experimental(backface-visibility, $visibility,\n -moz, -webkit, -o, -ms, not(-khtml), official\n );\n}\n\n// @doc off\n// Transform Partials --------------------------------------------------------\n// These work well on their own, but they don't add to each other, they override.\n// Use along with transform parameter mixins to adjust origin, perspective and style\n// ---------------------------------------------------------------------------\n\n\n// Scale ---------------------------------------------------------------------\n// @doc on\n\n// Scale an object along the x and y axis:\n//\n// @include scale( [ scale-x, scale-y, perspective, 3D-only ] )\n//\n// where the 'scale-' arguments are unitless multipliers of the x and y dimensions\n// and perspective, which works the same as the stand-alone perspective property/mixin\n// but applies to the individual element (multiplied with any parent perspective)\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scale(\n $scale-x: $default-scale-x,\n $scale-y: $scale-x,\n $perspective: false,\n $only3d: false\n) {\n $trans: scale($scale-x, $scale-y);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform($trans, $only3d);\n}\n\n// Scale an object along the x axis\n// @include scaleX( [ scale-x, perspective, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scaleX(\n $scale: $default-scale-x,\n $perspective: false,\n $only3d: false\n) {\n $trans: scaleX($scale);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform($trans, $only3d);\n}\n\n// Scale an object along the y axis\n// @include scaleY( [ scale-y, perspective, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scaleY(\n $scale: $default-scale-y,\n $perspective: false,\n $only3d: false\n) {\n $trans: scaleY($scale);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform($trans, $only3d);\n}\n\n// Scale an object along the z axis\n// @include scaleZ( [ scale-z, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scaleZ(\n $scale: $default-scale-z,\n $perspective: false\n) {\n $trans: scaleZ($scale);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform3d($trans);\n}\n\n// Scale and object along all three axis\n// @include scale3d( [ scale-x, scale-y, scale-z, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin scale3d(\n $scale-x: $default-scale-x,\n $scale-y: $default-scale-y,\n $scale-z: $default-scale-z,\n $perspective: false\n) {\n $trans: scale3d($scale-x, $scale-y, $scale-z);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform3d($trans);\n}\n\n// @doc off\n// Rotate --------------------------------------------------------------------\n// @doc on\n\n// Rotate an object around the z axis (2D)\n// @include rotate( [ rotation, perspective, 3D-only ] )\n// where 'rotation' is an angle set in degrees (deg) or radian (rad) units\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotate(\n $rotate: $default-rotate,\n $perspective: false,\n $only3d: false\n) {\n $trans: rotate($rotate);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform($trans, $only3d);\n}\n\n// A longcut for 'rotate' in case you forget that 'z' is implied\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotateZ(\n $rotate: $default-rotate,\n $perspective: false,\n $only3d: false\n) {\n @include rotate($rotate, $perspective, $only3d);\n}\n\n// Rotate an object around the x axis (3D)\n// @include rotateX( [ rotation, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotateX(\n $rotate: $default-rotate,\n $perspective: false\n) {\n $trans: rotateX($rotate);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform3d($trans);\n}\n\n// Rotate an object around the y axis (3D)\n// @include rotate( [ rotation, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotateY(\n $rotate: $default-rotate,\n $perspective: false\n) {\n $trans: rotateY($rotate);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform3d($trans);\n}\n\n// Rotate an object around an arbitrary axis (3D)\n// @include rotate( [ vector-x, vector-y, vector-z, rotation, perspective ] )\n// where the 'vector-' arguments accept unitless numbers.\n// These numbers are not important on their own, but in relation to one another\n// creating an axis from your transform-origin, along the axis of Xx = Yy = Zz.\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin rotate3d(\n $vector-x: $default-vector-x,\n $vector-y: $default-vector-y,\n $vector-z: $default-vector-z,\n $rotate: $default-rotate,\n $perspective: false\n) {\n $trans: rotate3d($vector-x, $vector-y, $vector-z, $rotate);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform3d($trans);\n}\n\n// @doc off\n// Translate -----------------------------------------------------------------\n// @doc on\n\n// Move an object along the x or y axis (2D)\n// @include translate( [ translate-x, translate-y, perspective, 3D-only ] )\n// where the 'translate-' arguments accept any distance in percentages or absolute (px, cm, in, em etc..) units.\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translate(\n $translate-x: $default-translate-x,\n $translate-y: $default-translate-y,\n $perspective: false,\n $only3d: false\n) {\n $trans: translate($translate-x, $translate-y);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform($trans, $only3d);\n}\n\n// Move an object along the x axis (2D)\n// @include translate( [ translate-x, perspective, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translateX(\n $trans-x: $default-translate-x,\n $perspective: false,\n $only3d: false\n) {\n $trans: translateX($trans-x);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform($trans, $only3d);\n}\n\n// Move an object along the y axis (2D)\n// @include translate( [ translate-y, perspective, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translateY(\n $trans-y: $default-translate-y,\n $perspective: false,\n $only3d: false\n) {\n $trans: translateY($trans-y);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform($trans, $only3d);\n}\n\n// Move an object along the z axis (3D)\n// @include translate( [ translate-z, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translateZ(\n $trans-z: $default-translate-z,\n $perspective: false\n) {\n $trans: translateZ($trans-z);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform3d($trans);\n}\n\n// Move an object along the x, y and z axis (3D)\n// @include translate( [ translate-x, translate-y, translate-z, perspective ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin translate3d(\n $translate-x: $default-translate-x,\n $translate-y: $default-translate-y,\n $translate-z: $default-translate-z,\n $perspective: false\n) {\n $trans: translate3d($translate-x, $translate-y, $translate-z);\n @if $perspective { $trans: perspective($perspective) $trans; }\n @include transform3d($trans);\n}\n\n// @doc off\n// Skew ----------------------------------------------------------------------\n// @doc on\n\n// Skew an element:\n//\n// @include skew( [ skew-x, skew-y, 3D-only ] )\n//\n// where the 'skew-' arguments accept css angles in degrees (deg) or radian (rad) units.\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin skew(\n $skew-x: $default-skew-x,\n $skew-y: $default-skew-y,\n $only3d: false\n) {\n $trans: skew($skew-x, $skew-y);\n @include transform($trans, $only3d);\n}\n\n// Skew an element along the x axiz\n//\n// @include skew( [ skew-x, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin skewX(\n $skew-x: $default-skew-x,\n $only3d: false\n) {\n $trans: skewX($skew-x);\n @include transform($trans, $only3d);\n}\n\n// Skew an element along the y axis\n//\n// @include skew( [ skew-y, 3D-only ] )\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin skewY(\n $skew-y: $default-skew-y,\n $only3d: false\n) {\n $trans: skewY($skew-y);\n @include transform($trans, $only3d);\n}\n\n\n// Full transform mixins\n// For settings any combination of transforms as arguments\n// These are complex and not highly recommended for daily use. They are mainly\n// here for backward-compatibility purposes.\n//\n// * they include origin adjustments\n// * scale takes a multiplier (unitless), rotate and skew take degrees (deg)\n//\n// **Note** This mixin cannot be combined with other transform mixins.\n@mixin create-transform(\n $perspective: false,\n $scale-x: false,\n $scale-y: false,\n $scale-z: false,\n $rotate-x: false,\n $rotate-y: false,\n $rotate-z: false,\n $rotate3d: false,\n $trans-x: false,\n $trans-y: false,\n $trans-z: false,\n $skew-x: false,\n $skew-y: false,\n $origin-x: false,\n $origin-y: false,\n $origin-z: false,\n $only3d: false\n) {\n $trans: unquote(\"\");\n\n // perspective\n @if $perspective { $trans: perspective($perspective) ; }\n\n // scale\n @if $scale-x and $scale-y {\n @if $scale-z { $trans: $trans scale3d($scale-x, $scale-y, $scale-z); }\n @else { $trans: $trans scale($scale-x, $scale-y); }\n } @else {\n @if $scale-x { $trans: $trans scaleX($scale-x); }\n @if $scale-y { $trans: $trans scaleY($scale-y); }\n @if $scale-z { $trans: $trans scaleZ($scale-z); }\n }\n\n // rotate\n @if $rotate-x { $trans: $trans rotateX($rotate-x); }\n @if $rotate-y { $trans: $trans rotateY($rotate-y); }\n @if $rotate-z { $trans: $trans rotateZ($rotate-z); }\n @if $rotate3d { $trans: $trans rotate3d($rotate3d); }\n\n // translate\n @if $trans-x and $trans-y {\n @if $trans-z { $trans: $trans translate3d($trans-x, $trans-y, $trans-z); }\n @else { $trans: $trans translate($trans-x, $trans-y); }\n } @else {\n @if $trans-x { $trans: $trans translateX($trans-x); }\n @if $trans-y { $trans: $trans translateY($trans-y); }\n @if $trans-z { $trans: $trans translateZ($trans-z); }\n }\n\n // skew\n @if $skew-x and $skew-y { $trans: $trans skew($skew-x, $skew-y); }\n @else {\n @if $skew-x { $trans: $trans skewX($skew-x); }\n @if $skew-y { $trans: $trans skewY($skew-y); }\n }\n\n // apply it!\n @include transform($trans, $only3d);\n @include transform-origin($origin-x, $origin-y, $origin-z, $only3d);\n}\n\n\n// A simplified set of options\n// backwards-compatible with the previous version of the 'transform' mixin\n@mixin simple-transform(\n $scale: false,\n $rotate: false,\n $trans-x: false,\n $trans-y: false,\n $skew-x: false,\n $skew-y: false,\n $origin-x: false,\n $origin-y: false\n) {\n @include create-transform(\n false,\n $scale, $scale, false,\n false, false, $rotate, false,\n $trans-x, $trans-y, false,\n $skew-x, $skew-y,\n $origin-x, $origin-y, false,\n false\n );\n}\n","@import \"shared\";\n\n// CSS Transitions\n// Currently only works in Webkit.\n//\n// * expected in CSS3, FireFox 3.6/7 and Opera Presto 2.3\n// * We'll be prepared.\n//\n// Including this submodule sets following defaults for the mixins:\n//\n// $default-transition-property : all\n// $default-transition-duration : 1s\n// $default-transition-function : false\n// $default-transition-delay : false\n//\n// Override them if you like. Timing-function and delay are set to false for browser defaults (ease, 0s).\n\n$default-transition-property: all !default;\n\n$default-transition-duration: 1s !default;\n\n$default-transition-function: false !default;\n\n$default-transition-delay: false !default;\n\n$transitionable-prefixed-values: transform, transform-origin !default;\n\n// One or more properties to transition\n//\n// * for multiple, use a comma-delimited list\n// * also accepts \"all\" or \"none\"\n\n@mixin transition-property($property-1: $default-transition-property,\n $property-2 : false,\n $property-3 : false,\n $property-4 : false,\n $property-5 : false,\n $property-6 : false,\n $property-7 : false,\n $property-8 : false,\n $property-9 : false,\n $property-10: false\n) {\n @if type-of($property-1) == string { $property-1: unquote($property-1); }\n $properties: compact($property-1, $property-2, $property-3, $property-4, $property-5, $property-6, $property-7, $property-8, $property-9, $property-10);\n @if $experimental-support-for-webkit { -webkit-transition-property : prefixed-for-transition(-webkit, $properties); }\n @if $experimental-support-for-mozilla { -moz-transition-property : prefixed-for-transition(-moz, $properties); }\n @if $experimental-support-for-opera { -o-transition-property : prefixed-for-transition(-o, $properties); }\n transition-property : $properties;\n}\n\n// One or more durations in seconds\n//\n// * for multiple, use a comma-delimited list\n// * these durations will affect the properties in the same list position\n\n@mixin transition-duration($duration-1: $default-transition-duration,\n $duration-2 : false,\n $duration-3 : false,\n $duration-4 : false,\n $duration-5 : false,\n $duration-6 : false,\n $duration-7 : false,\n $duration-8 : false,\n $duration-9 : false,\n $duration-10: false\n) {\n @if type-of($duration-1) == string { $duration-1: unquote($duration-1); }\n $durations: compact($duration-1, $duration-2, $duration-3, $duration-4, $duration-5, $duration-6, $duration-7, $duration-8, $duration-9, $duration-10);\n @include experimental(transition-duration, $durations,\n -moz, -webkit, -o, not(-ms), not(-khtml), official\n );\n}\n\n// One or more timing functions\n//\n// * [ ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(x1, y1, x2, y2)]\n// * For multiple, use a comma-delimited list\n// * These functions will effect the properties in the same list position\n\n@mixin transition-timing-function($function-1: $default-transition-function,\n $function-2 : false,\n $function-3 : false,\n $function-4 : false,\n $function-5 : false,\n $function-6 : false,\n $function-7 : false,\n $function-8 : false,\n $function-9 : false,\n $function-10: false\n) {\n $function-1: unquote($function-1);\n $functions: compact($function-1, $function-2, $function-3, $function-4, $function-5, $function-6, $function-7, $function-8, $function-9, $function-10);\n @include experimental(transition-timing-function, $functions,\n -moz, -webkit, -o, not(-ms), not(-khtml), official\n );\n}\n\n// One or more transition-delays in seconds\n//\n// * for multiple, use a comma-delimited list\n// * these delays will effect the properties in the same list position\n\n@mixin transition-delay($delay-1: $default-transition-delay,\n $delay-2 : false,\n $delay-3 : false,\n $delay-4 : false,\n $delay-5 : false,\n $delay-6 : false,\n $delay-7 : false,\n $delay-8 : false,\n $delay-9 : false,\n $delay-10: false\n) {\n @if type-of($delay-1) == string { $delay-1: unquote($delay-1); }\n $delays: compact($delay-1, $delay-2, $delay-3, $delay-4, $delay-5, $delay-6, $delay-7, $delay-8, $delay-9, $delay-10);\n @include experimental(transition-delay, $delays,\n -moz, -webkit, -o, not(-ms), not(-khtml), official\n );\n}\n\n// Transition all-in-one shorthand\n\n@mixin single-transition(\n $property: $default-transition-property,\n $duration: $default-transition-duration,\n $function: $default-transition-function,\n $delay: $default-transition-delay\n) {\n @include transition(compact($property $duration $function $delay));\n}\n\n@mixin transition(\n $transition-1 : default,\n $transition-2 : false,\n $transition-3 : false,\n $transition-4 : false,\n $transition-5 : false,\n $transition-6 : false,\n $transition-7 : false,\n $transition-8 : false,\n $transition-9 : false,\n $transition-10: false\n) {\n @if $transition-1 == default {\n $transition-1 : compact($default-transition-property $default-transition-duration $default-transition-function $default-transition-delay);\n }\n $transitions: false;\n @if type-of($transition-1) == list and type-of(nth($transition-1,1)) == list {\n $transitions: join($transition-1, compact($transition-2, $transition-3, $transition-4, $transition-5, $transition-6, $transition-7, $transition-8, $transition-9, $transition-10), comma);\n } @else {\n $transitions : compact($transition-1, $transition-2, $transition-3, $transition-4, $transition-5, $transition-6, $transition-7, $transition-8, $transition-9, $transition-10);\n }\n $delays: comma-list();\n $has-delays: false;\n $webkit-value: comma-list();\n $moz-value: comma-list();\n $o-value: comma-list();\n\n // This block can be made considerably simpler at the point in time that\n // we no longer need to deal with the differences in how delays are treated.\n @each $transition in $transitions {\n // Extract the values from the list\n // (this would be cleaner if nth took a 3rd argument to provide a default value).\n $property: nth($transition, 1);\n $duration: false;\n $timing-function: false;\n $delay: false;\n @if length($transition) > 1 { $duration: nth($transition, 2); }\n @if length($transition) > 2 { $timing-function: nth($transition, 3); }\n @if length($transition) > 3 { $delay: nth($transition, 4); $has-delays: true; }\n\n // If a delay is provided without a timing function\n @if is-time($timing-function) and not($delay) { $delay: $timing-function; $timing-function: false; $has-delays: true; }\n\n // Keep a list of delays in case one is specified\n $delays: append($delays, if($delay, $delay, 0s));\n\n $webkit-value: append($webkit-value, compact((prefixed-for-transition(-webkit, $property) $duration $timing-function)...));\n $moz-value: append( $moz-value, compact((prefixed-for-transition( -moz, $property) $duration $timing-function $delay)...));\n $o-value: append( $o-value, compact((prefixed-for-transition( -o, $property) $duration $timing-function $delay)...));\n }\n\n @if $experimental-support-for-webkit { -webkit-transition : $webkit-value;\n // old webkit doesn't support the delay parameter in the shorthand so we progressively enhance it.\n @if $has-delays { -webkit-transition-delay : $delays; } }\n @if $experimental-support-for-mozilla { -moz-transition : $moz-value; }\n @if $experimental-support-for-opera { -o-transition : $o-value; }\n transition : $transitions;\n}\n\n// coerce a list to be comma delimited or make a new, empty comma delimited list.\n@function comma-list($list: ()) {\n @return join((), $list, comma);\n}\n\n// Returns `$property` with the given prefix if it is found in `$transitionable-prefixed-values`.\n@function prefixed-for-transition($prefix, $property) {\n @if type-of($property) == list {\n $new-list: comma-list();\n @each $v in $property {\n $new-list: append($new-list, prefixed-for-transition($prefix, $v));\n }\n @return $new-list;\n } @else {\n @if index($transitionable-prefixed-values, $property) {\n @return #{$prefix}-#{$property};\n } @else {\n @return $property;\n }\n }\n}\n\n// Checks if the value given is a unit of time.\n@function is-time($value) {\n @if type-of($value) == number {\n @return not(not(index(s ms, unit($value))));\n } @else {\n @return false;\n }\n}\n","@import \"shared\";\n\n// Change the appearance for Mozilla, Webkit and possibly the future.\n// The appearance property is currently not present in any newer CSS specification.\n//\n// There is no official list of accepted values, but you might check these source:\n// Mozilla : https://developer.mozilla.org/en/CSS/-moz-appearance\n// Webkit : http://code.google.com/p/webkit-mirror/source/browse/Source/WebCore/css/CSSValueKeywords.in?spec=svnf1aea559dcd025a8946aa7da6e4e8306f5c1b604&r=63c7d1af44430b314233fea342c3ddb2a052e365\n// (search for 'appearance' within the page)\n\n@mixin appearance($ap) {\n $ap: unquote($ap);\n @include experimental(appearance, $ap,\n -moz, -webkit, not(-o), not(-ms), not(-khtml), official\n );\n}\n","@import \"shared\";\n\n// Webkit, IE10 and future support for [CSS Regions](http://dev.w3.org/csswg/css3-regions/)\n//\n// $target is a value you use to link two regions of your css. Give the source of your content the flow-into property, and give your target container the flow-from property.\n//\n// For a visual explanation, see the diagrams at Chris Coyier's\n// [CSS-Tricks](http://css-tricks.com/content-folding/)\n\n@mixin flow-into($target) {\n $target: unquote($target);\n @include experimental(flow-into, $target,\n not(-moz), -webkit, not(-o), -ms, not(-khtml), not official\n );\n}\n\n@mixin flow-from($target) {\n $target: unquote($target);\n @include experimental(flow-from, $target,\n not(-moz), -webkit, not(-o), -ms, not(-khtml), not official\n );\n}","@import \"shared\";\n\n// Mixins to support specific CSS Text Level 3 elements\n//\n//\n//\n// Mixin for word-break properties\n// http://www.w3.org/css3-text/#word-break\n// * legal values for $type : normal, keep-all, break-all\n//\n// Example:\n// p.wordBreak {@include word-break(break-all);}\n//\n// Which generates:\n// p.wordBreak {\n// -ms-word-break: break-all;\n// word-break: break-all;\n// word-break: break-word;}\n//\n@mixin word-break($value: normal){\n @if $value == break-all {\n //Most browsers handle the break-all case the same...\n @include experimental(word-break, $value,\n not(-moz), not(-webkit), not(-o), -ms, not(-khtml), official\n );\n //Webkit handles break-all differently... as break-word\n @include experimental(word-break, break-word,\n not(-moz), not(-webkit), not(-o), not(-ms), not(-khtml), official\n );\n }\n @else {\n @include experimental(word-break, $value,\n not(-moz), not(-webkit), not(-o), -ms, not(-khtml), official\n );\n }\n}\n\n// Mixin for the hyphens property\n//\n// W3C specification: http://www.w3.org/TR/css3-text/#hyphens\n// * legal values for $type : auto, manual, none\n//\n// Example:\n// p {\n// @include hyphens(auto);}\n// Which generates:\n// p {\n// -moz-hyphens: auto;\n// -webkit-hyphens: auto;\n// hyphens: auto;}\n//\n@mixin hyphens($value: auto){\n @include experimental(hyphens, $value,\n -moz, -webkit, not(-o), not(-ms), not(-khtml), official\n );\n}\n\n// Mixin for x-browser hyphenation based on @auchenberg's post:\n// Removes the need for the HTML tag\n// http://blog.kenneth.io/blog/2012/03/04/word-wrapping-hypernation-using-css/\n//\n// Example:\n// div {@include hyphenation;}\n//\n// Which generates:\n// div {\n// -ms-word-break: break-all;\n// word-break: break-all;\n// word-break: break-word;\n// -moz-hyphens: auto;\n// -webkit-hyphens: auto;\n// hyphens: auto;}\n//\n@mixin hyphenation{\n @include word-break(break-all);\n @include hyphens;\n}\n","@import \"shared\";\n\n// Provides cross-browser support for the upcoming (?) css3 filter property.\n//\n// Each filter argument should adhere to the standard css3 syntax for the\n// filter property.\n@mixin filter (\n $filter-1,\n $filter-2 : false,\n $filter-3 : false,\n $filter-4 : false,\n $filter-5 : false,\n $filter-6 : false,\n $filter-7 : false,\n $filter-8 : false,\n $filter-9 : false,\n $filter-10: false\n) {\n $filter : compact($filter-1, $filter-2, $filter-3, $filter-4, $filter-5, $filter-6, $filter-7, $filter-8, $filter-9, $filter-10);\n @include experimental(filter, $filter,\n -moz, -webkit, not(-o), not(-ms), not(-khtml), official\n );\n}\n","$experimental-support-for-pie: true !default;\n\n// It is recommended that you use Sass's @extend directive to apply the behavior\n// to your PIE elements. To assist you, Compass provides this variable.\n// When set, it will cause the `@include pie` mixin to extend this class.\n// The class name you provide should **not** include the `.`.\n$pie-base-class: false !default;\n\n// The default approach to using PIE.\n// Can be one of:\n//\n// * relative (default)\n// * z-index\n// * none\n$pie-default-approach: relative !default;\n\n// The location of your PIE behavior file\n// This should be root-relative to your web server\n// relative assets don't work. It is recommended that\n// you set this yourself.\n$pie-behavior: stylesheet-url(\"PIE.htc\") !default;\n\n// When using the z-index approach, the\n// first ancestor of the PIE element at\n// or before the container's opaque background\n// should have a z-index set as well to ensure\n// propert z-index stacking.\n//\n// The `$position` argument must be some non-static\n// value (absolute, relative, etc.)\n@mixin pie-container($z-index: 0, $position: relative) {\n z-index: $z-index;\n position: $position;\n}\n\n// PIE elements must have this behavior attached to them.\n// IE is broken -- it doesn't think of behavior urls as\n// relative to the stylesheet. It considers them relative\n// to the webpage. As a result, you cannot reliably use\n// compass's relative_assets with PIE.\n//\n// * `$approach` - one of: relative, z-index, or none\n// * `$z-index` - when using the z-index approach, this\n// is the z-index that is applied.\n@mixin pie-element(\n $approach: $pie-default-approach,\n $z-index: 0\n) {\n behavior: $pie-behavior;\n @if $approach == relative {\n position: relative;\n }\n @else if $approach == z-index {\n z-index: $z-index;\n }\n}\n\n// a smart mixin that knows to extend or include pie-element according\n// to your stylesheet's configuration variables.\n@mixin pie($base-class: $pie-base-class) {\n @if $base-class {\n @extend .#{$base-class};\n }\n @else {\n @include pie-element;\n }\n}\n\n// Watch `$n` levels of ancestors for changes to their class attribute\n// So that cascading styles will work correctly on the PIE element.\n@mixin pie-watch-ancestors($n) {\n -pie-watch-ancestors: $n;\n}\n","// User Interface ------------------------------------------------------------\n// This file can be expanded to handle all the user interface properties as\n// they become available in browsers:\n// http://www.w3.org/TR/2000/WD-css3-userint-20000216\n@import \"shared\";\n\n\n// This property controls the selection model and granularity of an element.\n//\n// @param $select\n// [ none | text | toggle | element | elements | all | inherit ]\n@mixin user-select($select) {\n $select: unquote($select);\n @include experimental(user-select, $select,\n -moz, -webkit, not(-o), -ms, -khtml, official\n );\n}\n\n// Style the html5 input placeholder in browsers that support it.\n//\n// The styles for the input placeholder are passed as mixin content\n// and the selector comes from the mixin's context.\n//\n// For example:\n//\n// #{elements-of-type(text-input)} {\n// @include input-placeholder {\n// color: #bfbfbf;\n// font-style: italic;\n// }\n// }\n//\n// if you want to apply the placeholder styles to all elements supporting\n// the `input-placeholder` pseudo class (beware of performance impacts):\n//\n// * {\n// @include input-placeholder {\n// color: #bfbfbf;\n// font-style: italic;\n// }\n// }\n@mixin input-placeholder {\n &:-ms-input-placeholder { @content; }\n &:-moz-placeholder { @content; }\n &::-moz-placeholder { @content; }\n &::-webkit-input-placeholder { @content; }\n}\n","@import \"../support\";\n@import \"shared\";\n\n// This is the underlying implementation for all the other mixins in this module.\n// It is the only way to access prefix support for older versions of the spec.\n// Deviates from canonical Compass implementation by dropping support for\n// older versions of the Flexbox spec.\n//\n// `$properties`: map of property-value pairs that should be prefixed\n@mixin flexbox($properties) {\n @each $prop, $value in $properties {\n @if $prop == display {\n @include experimental-value(display, $value, not(-moz), -webkit,\n not(-o), not(-ms), not(-khtml), official);\n } @else {\n @include experimental($prop, $value, not(-moz), -webkit, not(-o),\n not(-ms), not(-khtml), official);\n }\n }\n}\n\n// Values for $display are: flex (default), inline-flex\n@mixin display-flex($display: flex) {\n @include flexbox((display: $display));\n}\n\n// Values: row | row-reverse | column | column-reverse\n@mixin flex-direction($direction) {\n @include flexbox((flex-direction: $direction));\n}\n\n// Values: nowrap | wrap | wrap-reverse\n@mixin flex-wrap($wrap) {\n @include flexbox((flex-wrap: $wrap));\n}\n\n// Shorthand for flex-direction and flex-wrap.\n@mixin flex-flow($flow) {\n @include flexbox((flex-flow: $flow));\n}\n\n// Accepts an integer\n@mixin order($order) {\n @include flexbox((order: $order));\n}\n\n// Shorthand for flex-grow, flex-shrink and optionally flex-basis.\n// Space separated, in that order.\n@mixin flex($flex) {\n @include flexbox((flex: $flex));\n}\n\n// Accepts a number.\n@mixin flex-grow($flex-grow) {\n @include flexbox((flex-grow: $flex-grow));\n}\n\n// Accepts a number.\n@mixin flex-shrink($flex-shrink) {\n @include flexbox((flex-shrink: $flex-shrink));\n}\n\n// Accepts any legal value for the width property.\n@mixin flex-basis($flex-basis) {\n @include flexbox((flex-basis: $flex-basis));\n}\n\n// Legal values: flex-start | flex-end | center | space-between | space-around\n@mixin justify-content($justify-content) {\n @include flexbox((justify-content: $justify-content));\n}\n\n// Legal values: flex-start | flex-end | center | baseline | stretch\n@mixin align-items($align-items) {\n @include flexbox((align-items: $align-items));\n}\n\n// Legal values: auto | flex-start | flex-end | center | baseline | stretch\n@mixin align-self($align-self) {\n @include flexbox((align-self: $align-self));\n}\n\n// Legal values: flex-start | flex-end | center | space-between | space-around | stretch\n@mixin align-content($align-content) {\n @include flexbox((align-content: $align-content));\n}\n","@import \"compass\";\n@import \"animation/core\";\n@import \"animation/animate\";\n","@import \"shared\";\n\n// CSS Animations.\n\n// Apply an animation property and value with the correct browser support\n@mixin animation-support($property, $value) {\n @include experimental($property, $value, -moz, -webkit, -o, -ms, not -khtml, official); }\n\n// Name of any animation as a string.\n$default-animation-name : false !default;\n\n// Duration of the entire animation in seconds.\n$default-animation-duration : false !default;\n\n// Delay for start of animation in seconds.\n$default-animation-delay : false !default;\n\n// The timing function(s) to be used between keyframes. [ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier($number, $number, $number, $number)]\n$default-animation-timing-function : false !default;\n\n// The number of times an animation cycle is played. [infinite | $number]\n$default-animation-iteration-count : false !default;\n\n// Whether or not the animation should play in reverse on alternate cycles. [normal | alternate]\n$default-animation-direction : false !default;\n\n// What values are applied by the animation outside the time it is executing. [none | forwards | backwards | both]\n$default-animation-fill-mode : false !default;\n\n// Whether the animation is running or paused. [running | paused]\n$default-animation-play-state : false !default;\n\n// Create a named animation sequence that can be applied to elements later.\n//\n// $name - The name of your animation.\n// @content - The keyframes of the animation.\n@mixin keyframes(\n $name,\n $moz: $experimental-support-for-mozilla,\n $webkit: $experimental-support-for-webkit,\n $o: $experimental-support-for-opera,\n $ms: $experimental-support-for-microsoft,\n $khtml: $experimental-support-for-khtml,\n $official: true\n) {\n @if $moz {\n @include with-only-support-for($moz: true) {\n @-moz-keyframes #{$name} { @content; }\n }\n }\n @if $webkit {\n @include with-only-support-for($webkit: true) {\n @-webkit-keyframes #{$name} { @content; }\n }\n }\n @if $o {\n @include with-only-support-for($o: true) {\n @-o-keyframes #{$name} { @content; }\n }\n }\n @if $ms {\n @include with-only-support-for($ms: true) {\n @-ms-keyframes #{$name} { @content; }\n }\n }\n @if $khtml {\n @include with-only-support-for($khtml: true) {\n @-khtml-keyframes #{$name} { @content; }\n }\n }\n @if $official {\n @include with-only-support-for {\n @keyframes #{$name} { @content; }\n }\n }\n}\n\n// Apply 1-10 animation names.\n@mixin animation-name($name-1: $default-animation-name, $name-2: false, $name-3: false, $name-4: false, $name-5: false, $name-6: false, $name-7: false, $name-8: false, $name-9: false, $name-10: false) {\n $name: compact($name-1, $name-2, $name-3, $name-4, $name-5, $name-6, $name-7, $name-8, $name-9, $name-10);\n @include animation-support(animation-name, $name); }\n\n// Apply 1-10 animation durations.\n@mixin animation-duration($duration-1: $default-animation-duration, $duration-2: false, $duration-3: false, $duration-4: false, $duration-5: false, $duration-6: false, $duration-7: false, $duration-8: false, $duration-9: false, $duration-10: false) {\n $duration: compact($duration-1, $duration-2, $duration-3, $duration-4, $duration-5, $duration-6, $duration-7, $duration-8, $duration-9, $duration-10);\n @include animation-support(animation-duration, $duration); }\n\n// Apply 1-10 animation delays.\n@mixin animation-delay($delay-1: $default-animation-delay, $delay-2: false, $delay-3: false, $delay-4: false, $delay-5: false, $delay-6: false, $delay-7: false, $delay-8: false, $delay-9: false, $delay-10: false) {\n $delay: compact($delay-1, $delay-2, $delay-3, $delay-4, $delay-5, $delay-6, $delay-7, $delay-8, $delay-9, $delay-10);\n @include animation-support(animation-delay, $delay); }\n\n// Apply 1-10 animation timing functions.\n@mixin animation-timing-function($function-1: $default-animation-timing-function, $function-2: false, $function-3: false, $function-4: false, $function-5: false, $function-6: false, $function-7: false, $function-8: false, $function-9: false, $function-10: false) {\n $function: compact($function-1, $function-2, $function-3, $function-4, $function-5, $function-6, $function-7, $function-8, $function-9, $function-10);\n @include animation-support(animation-timing-function, $function); }\n\n// Apply 1-10 animation iteration counts.\n@mixin animation-iteration-count($count-1: $default-animation-iteration-count, $count-2: false, $count-3: false, $count-4: false, $count-5: false, $count-6: false, $count-7: false, $count-8: false, $count-9: false, $count-10: false) {\n $count: compact($count-1, $count-2, $count-3, $count-4, $count-5, $count-6, $count-7, $count-8, $count-9, $count-10);\n @include animation-support(animation-iteration-count, $count); }\n\n// Apply 1-10 animation directions.\n@mixin animation-direction($direction-1: $default-animation-direction, $direction-2: false, $direction-3: false, $direction-4: false, $direction-5: false, $direction-6: false, $direction-7: false, $direction-8: false, $direction-9: false, $direction-10: false) {\n $direction: compact($direction-1, $direction-2, $direction-3, $direction-4, $direction-5, $direction-6, $direction-7, $direction-8, $direction-9, $direction-10);\n @include animation-support(animation-direction, $direction); }\n\n// Apply 1-10 animation fill modes.\n@mixin animation-fill-mode($mode-1: $default-animation-fill-mode, $mode-2: false, $mode-3: false, $mode-4: false, $mode-5: false, $mode-6: false, $mode-7: false, $mode-8: false, $mode-9: false, $mode-10: false) {\n $mode: compact($mode-1, $mode-2, $mode-3, $mode-4, $mode-5, $mode-6, $mode-7, $mode-8, $mode-9, $mode-10);\n @include animation-support(animation-fill-mode, $mode); }\n\n// Apply 1-10 animation play states.\n@mixin animation-play-state($state-1: $default-animation-play-state, $state-2: false, $state-3: false, $state-4: false, $state-5: false, $state-6: false, $state-7: false, $state-8: false, $state-9: false, $state-10: false) {\n $state: compact($state-1, $state-2, $state-3, $state-4, $state-5, $state-6, $state-7, $state-8, $state-9, $state-10);\n @include animation-support(animation-play-state, $state); }\n\n// Shortcut to apply a named animation to an element, with all the settings.\n//\n// $animation-1 : Name and settings for the first animation. [ | default]\n// ...\n// $animation-10 : Name and settings for the tenth animation. \n@mixin animation($animation-1: default, $animation-2: false, $animation-3: false, $animation-4: false, $animation-5: false, $animation-6: false, $animation-7: false, $animation-8: false, $animation-9: false, $animation-10: false) {\n @if $animation-1 == default {\n $animation-1: -compass-space-list(compact($default-animation-name, $default-animation-duration, $default-animation-timing-function, $default-animation-delay, $default-animation-iteration-count, $default-animation-direction, $default-animation-fill-mode, $default-animation-play-state)); }\n $animation: compact($animation-1, $animation-2, $animation-3, $animation-4, $animation-5, $animation-6, $animation-7, $animation-8, $animation-9, $animation-10);\n @include animation-support(animation, $animation); }\n","@mixin set-experimental-support($moz: false, $webkit: false, $ms: false, $o: false, $khtml: false) {\n $experimental-support-for-mozilla: $moz;\n $experimental-support-for-webkit: $webkit;\n $experimental-support-for-microsoft: $ms;\n $experimental-support-for-opera: $o;\n $experimental-support-for-khtml: $khtml;\n}\n\n@mixin with-only-support-for($moz: false, $webkit: false, $ms: false, $o: false, $khtml: false) {\n // Capture the current state\n $original-moz: $experimental-support-for-mozilla;\n $original-webkit: $experimental-support-for-webkit;\n $original-o: $experimental-support-for-opera;\n $original-ms: $experimental-support-for-microsoft;\n $original-khtml: $experimental-support-for-khtml;\n\n @include set-experimental-support($moz, $webkit, $ms, $o, $khtml);\n\n @content;\n\n @include set-experimental-support($original-moz, $original-webkit, $original-ms, $original-o, $original-khtml);\n}","// ---------------------------------------------------------------------------\n// Animations from Animate.css\n// Author : Dan Eden\n// URL : http://daneden.me/animate/\n//\n// Attention seekers\n// - flash bounce shake tada swing wobble pulse\n// Fading entrances\n// - fadeIn fadeInUp fadeInDown fadeInLeft fadeInRight fadeInUpBig fadeInDownBig fadeInLeftBig fadeInRightBig\n// Fading exits\n// - fadeOut fadeOutUp fadeOutDown fadeOutLeft fadeOutRight fadeOutUpBig fadeOutDownBig fadeOutLeftBig fadeOutRightBig\n// Bouncing entrances\n// - bounceIn bounceInDown bounceInUp bounceInLeft bounceInRight\n// Bouncing exits\n// - bounceOut bounceOutDown bounceOutUp bounceOutLeft bounceOutRight\n// Rotating entrances\n// - rotateIn rotateInDownLeft rotateInDownRight rotateInUpLeft rotateInUpRight\n// Rotating exits\n// - rotateOut rotateOutDownLeft rotateOutDownRight rotateOutUpLeft rotateOutUpRight\n// Lightspeed\n// - lightSpeedIn lightSpeedOut\n// Specials\n// - hinge rollIn rollOut\n// ---------------------------------------------------------------------------\n@import \"animate/attention-seekers\";\n@import \"animate/bouncing\";\n@import \"animate/fading\";\n@import \"animate/flippers\";\n@import \"animate/lightspeed\";\n@import \"animate/rotating\";\n@import \"animate/specials\";\n","// ---------------------------------------------------------------------------\n@include keyframes(flash) {\n 0% {\n opacity: 1; }\n 25% {\n opacity: 0; }\n 50% {\n opacity: 1; }\n 75% {\n opacity: 0; }\n 100% {\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounce) {\n 0% {\n @include translateY(0); }\n 20% {\n @include translateY(0); }\n 40% {\n @include translateY(-30px); }\n 50% {\n @include translateY(0); }\n 60% {\n @include translateY(-15px); }\n 80% {\n @include translateY(0); }\n 100% {\n @include translateY(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(shake) {\n 0% {\n @include translateX(0); }\n 10% {\n @include translateX(-10px); }\n 20% {\n @include translateX(10px); }\n 30% {\n @include translateX(-10px); }\n 40% {\n @include translateX(10px); }\n 50% {\n @include translateX(-10px); }\n 60% {\n @include translateX(10px); }\n 70% {\n @include translateX(-10px); }\n 80% {\n @include translateX(10px); }\n 90% {\n @include translateX(-10px); }\n 100% {\n @include translateX(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(tada) {\n 0% {\n @include scale(1); }\n 10% {\n @include transform(scale(0.9) rotate(-3deg)); }\n 20% {\n @include transform(scale(0.9) rotate(-3deg)); }\n 30% {\n @include transform(scale(1.1) rotate(3deg)); }\n 40% {\n @include transform(scale(1.1) rotate(-3deg)); }\n 50% {\n @include transform(scale(1.1) rotate(3deg)); }\n 60% {\n @include transform(scale(1.1) rotate(-3deg)); }\n 70% {\n @include transform(scale(1.1) rotate(3deg)); }\n 80% {\n @include transform(scale(1.1) rotate(-3deg)); }\n 90% {\n @include transform(scale(1.1) rotate(3deg)); }\n 100% {\n @include transform(scale(1) rotate(0)); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(swing) {\n 20%, 40%, 60%, 80%, 100% {\n @include transform-origin(top center); }\n 20% {\n @include rotate(15deg); }\n 40% {\n @include rotate(-10deg); }\n 60% {\n @include rotate(5deg); }\n 80% {\n @include rotate(-5deg); }\n 100% {\n @include rotate(0deg); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(wobble) {\n 0% {\n @include translateX(0%); }\n 15% {\n @include transform(translateX(-25%) rotate(-5deg)); }\n 30% {\n @include transform(translateX(20%) rotate(3deg)); }\n 45% {\n @include transform(translateX(-15%) rotate(-3deg)); }\n 60% {\n @include transform(translateX(10%) rotate(2deg)); }\n 75% {\n @include transform(translateX(-5%) rotate(-1deg)); }\n 100% {\n @include transform(translateX(0%)); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(pulse) {\n 0% {\n @include scale(1); }\n 50% {\n @include scale(1.1); }\n 100% {\n @include scale(1); } }\n \n \n// ---------------------------------------------------------------------------\n@include keyframes(wiggle) {\n 0% {\n @include skewX(9deg); }\n 10% {\n @include skewX(-8deg); }\n 20% {\n @include skewX(7deg); }\n 30% {\n @include skewX(-6deg); }\n 40% {\n @include skewX(5deg); }\n 50% {\n @include skewX(-4deg); }\n 60% {\n @include skewX(3deg); }\n 70% {\n @include skewX(-2deg); }\n 80% {\n @include skewX(1deg); }\n 90% {\n @include skewX(0deg); }\n 100% {\n @include skewX(0deg); } }","// ---------------------------------------------------------------------------\n@import \"bouncing/bouncing-exits\";\n@import \"bouncing/bouncing-entrances\";","// ---------------------------------------------------------------------------\n@include keyframes(bounceOut) {\n 0% {\n @include scale(1); }\n 25% {\n @include scale(0.95); }\n 50% {\n opacity: 1;\n @include scale(1.1); }\n 100% {\n opacity: 0;\n @include scale(0.3); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceOutUp) {\n 0% {\n @include translateY(0); }\n 20% {\n opacity: 1;\n @include translateY(20px); }\n 100% {\n opacity: 0;\n @include translateY(-2000px); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceOutDown) {\n 0% {\n @include translateY(0); }\n 20% {\n opacity: 1;\n @include translateY(-20px); }\n 100% {\n opacity: 0;\n @include translateY(2000px); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceOutLeft) {\n 0% {\n @include translateX(0); }\n 20% {\n opacity: 1;\n @include translateX(20px); }\n 100% {\n opacity: 0;\n @include translateX(-2000px); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceOutRight) {\n 0% {\n @include translateX(0); }\n 20% {\n opacity: 1;\n @include translateX(-20px); }\n 100% {\n opacity: 0;\n @include translateX(2000px); } }\n","// ---------------------------------------------------------------------------\n@include keyframes(bounceIn) {\n 0% {\n opacity: 0;\n @include scale(0.3); }\n 50% {\n opacity: 1;\n @include scale(1.05); }\n 70% {\n @include scale(0.9); }\n 100% {\n @include scale(1); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceInDown) {\n 0% {\n opacity: 0;\n @include translateY(-2000px); }\n 60% {\n opacity: 1;\n @include translateY(30px); }\n 80% {\n @include translateY(-10px); }\n 100% {\n @include translateY(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceInUp) {\n 0% {\n opacity: 0;\n @include translateY(2000px); }\n 60% {\n opacity: 1;\n @include translateY(-30px); }\n 80% {\n @include translateY(10px); }\n 100% {\n @include translateY(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceInRight) {\n 0% {\n opacity: 0;\n @include translateX(2000px); }\n 60% {\n opacity: 1;\n @include translateX(-30px); }\n 80% {\n @include translateX(10px); }\n 100% {\n @include translateX(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(bounceInLeft) {\n 0% {\n opacity: 0;\n @include translateX(-2000px); }\n 60% {\n opacity: 1;\n @include translateX(30px); }\n 80% {\n @include translateX(-10px); }\n 100% {\n @include translateX(0); } }\n","// ---------------------------------------------------------------------------\n@import \"fading/fading-exits\";\n@import \"fading/fading-entrances\";","// ---------------------------------------------------------------------------\n@include keyframes(fadeOut) {\n 0% {\n opacity: 1; }\n 100% {\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutUp) {\n 0% {\n @include translateY(0);\n opacity: 1; }\n 100% {\n @include translateY(-20px);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutDown) {\n 0% {\n @include translateY(0);\n opacity: 1; }\n 100% {\n @include translateY(20px);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutRight) {\n 0% {\n @include translateX(0);\n opacity: 1; }\n 100% {\n @include translateX(20px);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutLeft) {\n 0% {\n @include translateX(0);\n opacity: 1; }\n 100% {\n @include translateX(-20px);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutUpBig) {\n 0% {\n @include translateY(0);\n opacity: 1; }\n 100% {\n @include translateY(-2000px);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutDownBig) {\n 0% {\n opacity: 1;\n @include translateY(0); }\n 100% {\n opacity: 0;\n @include translateY(2000px); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutRightBig) {\n 0% {\n opacity: 1;\n @include translateX(0); }\n 100% {\n opacity: 0;\n @include translateX(2000px); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeOutLeftBig) {\n 0% {\n opacity: 1;\n @include translateX(0); }\n 100% {\n opacity: 0;\n @include translateX(-2000px); } }\n","// ---------------------------------------------------------------------------\n@include keyframes(fadeIn) {\n 0% {\n opacity: 0; }\n 100% {\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInUp) {\n 0% {\n @include translateY(20px);\n opacity: 0; }\n 100% {\n @include translateY(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInDown) {\n 0% {\n @include translateY(-20px);\n opacity: 0; }\n 100% {\n @include translateY(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInRight) {\n 0% {\n @include translateX(20px);\n opacity: 0; }\n 100% {\n @include translateX(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInLeft) {\n 0% {\n @include translateX(-20px);\n opacity: 0; }\n 100% {\n @include translateX(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInUpBig) {\n 0% {\n @include translateY(2000px);\n opacity: 0; }\n 100% {\n @include translateY(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInDownBig) {\n 0% {\n opacity: 0;\n @include translateY(-2000px); }\n 100% {\n opacity: 1;\n @include translateY(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInRightBig) {\n 0% {\n opacity: 0;\n @include translateX(2000px); }\n 100% {\n opacity: 1;\n @include translateX(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(fadeInLeftBig) {\n 0% {\n opacity: 0;\n @include translateX(-2000px); }\n 100% {\n opacity: 1;\n @include translateX(0); } }\n","// ---------------------------------------------------------------------------\n@include keyframes(flip) {\n 0% {\n @include transform(perspective(400px) rotateY(0));\n @include animation-timing-function(ease-out);\n }\n 40% {\n @include transform(perspective(400px) translateZ(150px) rotateY(170deg));\n @include animation-timing-function(ease-out);\n }\n 50% {\n @include transform(perspective(400px) translateZ(150px) rotateY(190deg) scale(1));\n @include animation-timing-function(ease-in);\n }\n 80% {\n @include transform(perspective(400px) rotateY(360deg) scale(0.95));\n @include animation-timing-function(ease-in);\n }\n 100% {\n @include transform(perspective(400px) scale(1));\n @include animation-timing-function(ease-in);\n }\n}\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(flipInX) {\n 0% {\n @include transform(perspective(400px) rotateX(90deg));\n @include opacity(0);\n }\n 40% {\n @include transform(perspective(400px) rotateX(-10deg));\n }\n 70% {\n @include transform(perspective(400px) rotateX(10deg));\n }\n 100% {\n @include transform(perspective(400px) rotateX(0deg));\n @include opacity(1);\n }\n}\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(flipOutX) {\n 0% {\n @include transform(perspective(400px) rotateX(0deg));\n @include opacity(1);\n }\n 100% {\n @include transform(perspective(400px) rotateX(90deg));\n @include opacity(0);\n }\n}\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(flipInY) {\n 0% {\n @include transform(perspective(400px) rotateY(90deg));\n @include opacity(0);\n }\n 40% {\n @include transform(perspective(400px) rotateY(-10deg));\n }\n 70% {\n @include transform(perspective(400px) rotateY(10deg));\n }\n 100% {\n @include transform(perspective(400px) rotateY(0deg));\n @include opacity(1);\n }\n}\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(flipOutY) {\n 0% {\n @include transform(perspective(400px) rotateY(0deg));\n @include opacity(1);\n }\n 100% {\n @include transform(perspective(400px) rotateY(90deg));\n @include opacity(0);\n }\n}\n","// ---------------------------------------------------------------------------\n@include keyframes(lightSpeedIn) {\n 0% {\n @include transform(translateX(100%) skewX(-30deg));\n @include opacity(0); }\n 60% {\n @include transform(translateX(-20%) skewX(30deg));\n @include opacity(1); }\n 80% {\n @include transform(translateX(0%) skewX(-15deg));\n @include opacity(1); }\n 100% {\n @include transform(translateX(0%) skewX(0deg));\n @include opacity(1); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(lightSpeedOut) {\n 0% {\n @include transform(translateX(0%) skewX(0deg));\n @include opacity(1); }\n 100% {\n @include transform(translateX(100%) skewX(-30deg));\n @include opacity(0); } }","// ---------------------------------------------------------------------------\n@import \"rotating/rotating-exits\";\n@import \"rotating/rotating-entrances\";\n","// ---------------------------------------------------------------------------\n@include keyframes(rotateOut) {\n 0% {\n @include transform-origin(center center);\n @include rotate(0);\n opacity: 1; }\n 100% {\n @include transform-origin(center center);\n @include rotate(200deg);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateOutDownLeft) {\n 0% {\n @include transform-origin(left bottom);\n @include rotate(0);\n opacity: 1; }\n 100% {\n @include transform-origin(left bottom);\n @include rotate(90deg);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateOutUpLeft) {\n 0% {\n @include transform-origin(left bottom);\n @include rotate(0);\n opacity: 1; }\n 100% {\n @include transform-origin(left bottom);\n @include rotate(-90deg);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateOutDownRight) {\n 0% {\n @include transform-origin(right bottom);\n @include rotate(0);\n opacity: 1; }\n 100% {\n @include transform-origin(right bottom);\n @include rotate(-90deg);\n opacity: 0; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateOutUpRight) {\n 0% {\n @include transform-origin(right bottom);\n @include rotate(0);\n opacity: 1; }\n 100% {\n @include transform-origin(right bottom);\n @include rotate(90deg);\n opacity: 0; } }\n","// ---------------------------------------------------------------------------\n@include keyframes(rotateIn) {\n 0% {\n @include transform-origin(center center);\n @include rotate(-200deg);\n opacity: 0; }\n 100% {\n @include transform-origin(center center);\n @include rotate(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateInDownLeft) {\n 0% {\n @include transform-origin(left bottom);\n @include rotate(-90deg);\n opacity: 0; }\n 100% {\n @include transform-origin(left bottom);\n @include rotate(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateInUpLeft) {\n 0% {\n @include transform-origin(left bottom);\n @include rotate(90deg);\n opacity: 0; }\n 100% {\n @include transform-origin(left bottom);\n @include rotate(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateInUpRight) {\n 0% {\n @include transform-origin(right bottom);\n @include rotate(-90deg);\n opacity: 0; }\n 100% {\n @include transform-origin(right bottom);\n @include rotate(0);\n opacity: 1; } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rotateInDownRight) {\n 0% {\n @include transform-origin(right bottom);\n @include rotate(90deg);\n opacity: 0; }\n 100% {\n @include transform-origin(right bottom);\n @include rotate(0);\n opacity: 1; } }\n","// ---------------------------------------------------------------------------\n@include keyframes(hinge) {\n 0% {\n @include rotate(0);\n @include transform-origin(top left);\n @include animation-timing-function(ease-in-out); }\n 20%, 60% {\n @include rotate(80deg);\n @include transform-origin(top left);\n @include animation-timing-function(ease-in-out); }\n 40% {\n @include rotate(60deg);\n @include transform-origin(top left);\n @include animation-timing-function(ease-in-out); }\n 80% {\n @include transform(rotate(60deg) translateY(0));\n @include opacity(1);\n @include transform-origin(top left);\n @include animation-timing-function(ease-in-out); }\n 100% {\n @include translateY(700px);\n @include opacity(0); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rollIn) {\n 0% {\n @include opacity(0);\n @include transform(translateX(-100%) rotate(-120deg)); }\n 100% {\n @include opacity(1);\n @include transform(translateX(0px) rotate(0deg)); } }\n\n\n// ---------------------------------------------------------------------------\n@include keyframes(rollOut) {\n 0% {\n @include opacity(1);\n @include transform(translateX(0px) rotate(0deg)); }\n 100% {\n @include opacity(0);\n @include transform(translateX(-100%) rotate(-120deg)); } }\n","/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n// scss-docs-start import-stack\n// Configuration\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"utilities\";\n\n// Layout & components\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"containers\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"accordion\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"alert\";\n@import \"progress\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"offcanvas\";\n@import \"placeholders\";\n\n// Helpers\n@import \"helpers\";\n\n// Utilities\n@import \"utilities/api\";\n// scss-docs-end import-stack\n","// Toggles\n//\n// Used in conjunction with global variables to enable certain theme features.\n\n// Vendor\n@import \"vendor/rfs\";\n\n// Deprecate\n@import \"mixins/deprecate\";\n\n// Helpers\n@import \"mixins/breakpoints\";\n@import \"mixins/color-scheme\";\n@import \"mixins/image\";\n@import \"mixins/resize\";\n@import \"mixins/visually-hidden\";\n@import \"mixins/reset-text\";\n@import \"mixins/text-truncate\";\n\n// Utilities\n@import \"mixins/utilities\";\n\n// Components\n@import \"mixins/alert\";\n@import \"mixins/backdrop\";\n@import \"mixins/buttons\";\n@import \"mixins/caret\";\n@import \"mixins/pagination\";\n@import \"mixins/lists\";\n@import \"mixins/list-group\";\n@import \"mixins/forms\";\n@import \"mixins/table-variants\";\n\n// Skins\n@import \"mixins/border-radius\";\n@import \"mixins/box-shadow\";\n@import \"mixins/gradients\";\n@import \"mixins/transition\";\n\n// Layout\n@import \"mixins/clearfix\";\n@import \"mixins/container\";\n@import \"mixins/grid\";\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// Deprecate mixin\n//\n// This mixin can be used to deprecate mixins or functions.\n// `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to\n// some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap)\n@mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning: false) {\n @if ($enable-deprecation-messages != false and $ignore-warning != true) {\n @warn \"#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}.\";\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// scss-docs-start mixin-color-scheme\n@mixin color-scheme($name) {\n @media (prefers-color-scheme: #{$name}) {\n @content;\n }\n}\n// scss-docs-end mixin-color-scheme\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n","// Resize anything\n\n@mixin resizable($direction) {\n overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`\n resize: $direction; // Options: horizontal, vertical, both\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","@mixin reset-text {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or overflow-wrap / word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (eg. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$variable-prefix}#{$property-class}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$variable-prefix}#{$property-class}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $value in $is-local-vars {\n --#{$variable-prefix}#{$local-var}: #{$value};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// scss-docs-start alert-variant-mixin\n@mixin alert-variant($background, $border, $color) {\n color: $color;\n @include gradient-bg($background);\n border-color: $border;\n\n .alert-link {\n color: shade-color($color, 20%);\n }\n}\n// scss-docs-end alert-variant-mixin\n","// Shared between modals and offcanvases\n@mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex;\n width: 100vw;\n height: 100vh;\n background-color: $backdrop-bg;\n\n // Fade for backdrop\n &.fade { opacity: 0; }\n &.show { opacity: $backdrop-opacity; }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n// scss-docs-start btn-variant-mixin\n@mixin button-variant(\n $background,\n $border,\n $color: color-contrast($background),\n $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),\n $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),\n $hover-color: color-contrast($hover-background),\n $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),\n $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),\n $active-color: color-contrast($active-background),\n $disabled-background: $background,\n $disabled-border: $border,\n $disabled-color: color-contrast($disabled-background)\n) {\n color: $color;\n @include gradient-bg($background);\n border-color: $border;\n @include box-shadow($btn-box-shadow);\n\n &:hover {\n color: $hover-color;\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n }\n\n .btn-check:focus + &,\n &:focus {\n color: $hover-color;\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n @if $enable-shadows {\n @include box-shadow($btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5);\n }\n }\n\n .btn-check:checked + &,\n .btn-check:active + &,\n &:active,\n &.active,\n .show > &.dropdown-toggle {\n color: $active-color;\n background-color: $active-background;\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n border-color: $active-border;\n\n &:focus {\n @if $enable-shadows {\n @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5);\n }\n }\n }\n\n &:disabled,\n &.disabled {\n color: $disabled-color;\n background-color: $disabled-background;\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n border-color: $disabled-border;\n }\n}\n// scss-docs-end btn-variant-mixin\n\n// scss-docs-start btn-outline-variant-mixin\n@mixin button-outline-variant(\n $color,\n $color-hover: color-contrast($color),\n $active-background: $color,\n $active-border: $color,\n $active-color: color-contrast($active-background)\n) {\n color: $color;\n border-color: $color;\n\n &:hover {\n color: $color-hover;\n background-color: $active-background;\n border-color: $active-border;\n }\n\n .btn-check:focus + &,\n &:focus {\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n\n .btn-check:checked + &,\n .btn-check:active + &,\n &:active,\n &.active,\n &.dropdown-toggle.show {\n color: $active-color;\n background-color: $active-background;\n border-color: $active-border;\n\n &:focus {\n @if $enable-shadows {\n @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n }\n }\n\n &:disabled,\n &.disabled {\n color: $color;\n background-color: transparent;\n }\n}\n// scss-docs-end btn-outline-variant-mixin\n\n// scss-docs-start btn-size-mixin\n@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {\n padding: $padding-y $padding-x;\n @include font-size($font-size);\n // Manually declare to provide an override to the browser default\n @include border-radius($border-radius, 0);\n}\n// scss-docs-end btn-size-mixin\n","// scss-docs-start caret-mixins\n@mixin caret-down {\n border-top: $caret-width solid;\n border-right: $caret-width solid transparent;\n border-bottom: 0;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-up {\n border-top: 0;\n border-right: $caret-width solid transparent;\n border-bottom: $caret-width solid;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-end {\n border-top: $caret-width solid transparent;\n border-right: 0;\n border-bottom: $caret-width solid transparent;\n border-left: $caret-width solid;\n}\n\n@mixin caret-start {\n border-top: $caret-width solid transparent;\n border-right: $caret-width solid;\n border-bottom: $caret-width solid transparent;\n}\n\n@mixin caret($direction: down) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down();\n } @else if $direction == up {\n @include caret-up();\n } @else if $direction == end {\n @include caret-end();\n }\n }\n\n @if $direction == start {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @include caret-start();\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n// scss-docs-end caret-mixins\n","// Pagination\n\n// scss-docs-start pagination-mixin\n@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {\n .page-link {\n padding: $padding-y $padding-x;\n @include font-size($font-size);\n }\n\n .page-item {\n @if $pagination-margin-start == (-$pagination-border-width) {\n &:first-child {\n .page-link {\n @include border-start-radius($border-radius);\n }\n }\n\n &:last-child {\n .page-link {\n @include border-end-radius($border-radius);\n }\n }\n } @else {\n //Add border-radius to all pageLinks in case they have left margin\n .page-link {\n @include border-radius($border-radius);\n }\n }\n }\n}\n// scss-docs-end pagination-mixin\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// List Groups\n\n// scss-docs-start list-group-mixin\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: $color;\n background-color: $background;\n\n &.list-group-item-action {\n &:hover,\n &:focus {\n color: $color;\n background-color: shade-color($background, 10%);\n }\n\n &.active {\n color: $white;\n background-color: $color;\n border-color: $color;\n }\n }\n }\n}\n// scss-docs-end list-group-mixin\n","// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n\n// scss-docs-start form-validation-mixins\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state(\n $state,\n $color,\n $icon,\n $tooltip-color: color-contrast($color),\n $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),\n $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity)\n) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n font-style: $form-feedback-font-style;\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: $tooltip-color;\n background-color: $tooltip-bg-color;\n @include border-radius($form-feedback-tooltip-border-radius);\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .form-select {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n &:not([multiple]):not([size]),\n &:not([multiple])[size=\"1\"] {\n padding-right: $form-select-feedback-icon-padding-end;\n background-image: escape-svg($form-select-indicator), escape-svg($icon);\n background-position: $form-select-bg-position, $form-select-feedback-icon-position;\n background-size: $form-select-bg-size, $form-select-feedback-icon-size;\n }\n }\n\n &:focus {\n border-color: $color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n &:checked {\n background-color: $color;\n }\n\n &:focus {\n box-shadow: $focus-box-shadow;\n }\n\n ~ .form-check-label {\n color: $color;\n }\n }\n }\n .form-check-inline .form-check-input {\n ~ .#{$state}-feedback {\n margin-left: .5em;\n }\n }\n\n .input-group .form-control,\n .input-group .form-select {\n @include form-validation-state-selector($state) {\n @if $state == \"valid\" {\n z-index: 1;\n } @else if $state == \"invalid\" {\n z-index: 2;\n }\n &:focus {\n z-index: 3;\n }\n }\n }\n}\n// scss-docs-end form-validation-mixins\n","// scss-docs-start table-variant\n@mixin table-variant($state, $background) {\n .table-#{$state} {\n $color: color-contrast(opaque($body-bg, $background));\n $hover-bg: mix($color, $background, percentage($table-hover-bg-factor));\n $striped-bg: mix($color, $background, percentage($table-striped-bg-factor));\n $active-bg: mix($color, $background, percentage($table-active-bg-factor));\n\n --#{$variable-prefix}table-bg: #{$background};\n --#{$variable-prefix}table-striped-bg: #{$striped-bg};\n --#{$variable-prefix}table-striped-color: #{color-contrast($striped-bg)};\n --#{$variable-prefix}table-active-bg: #{$active-bg};\n --#{$variable-prefix}table-active-color: #{color-contrast($active-bg)};\n --#{$variable-prefix}table-hover-bg: #{$hover-bg};\n --#{$variable-prefix}table-hover-color: #{color-contrast($hover-bg)};\n\n color: $color;\n border-color: mix($color, $background, percentage($table-border-factor));\n }\n}\n// scss-docs-end table-variant\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n","@mixin box-shadow($shadow...) {\n @if $enable-shadows {\n $result: ();\n\n @each $value in $shadow {\n @if $value != null {\n $result: append($result, $value, \"comma\");\n }\n @if $value == none and length($shadow) > 1 {\n @warn \"The keyword 'none' must be used as a single argument.\";\n }\n }\n\n @if (length($result) > 0) {\n box-shadow: $result;\n }\n }\n}\n","// Gradients\n\n// scss-docs-start gradient-bg-mixin\n@mixin gradient-bg($color: null) {\n background-color: $color;\n\n @if $enable-gradients {\n background-image: var(--#{$variable-prefix}gradient);\n }\n}\n// scss-docs-end gradient-bg-mixin\n\n// scss-docs-start gradient-mixins\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n}\n\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n}\n\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n// scss-docs-end gradient-mixins\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n width: 100%;\n padding-right: var(--#{$variable-prefix}gutter-x, #{$gutter});\n padding-left: var(--#{$variable-prefix}gutter-x, #{$gutter});\n margin-right: auto;\n margin-left: auto;\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$variable-prefix}gutter-x: #{$gutter};\n --#{$variable-prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$variable-prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$variable-prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$variable-prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$variable-prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$variable-prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$variable-prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$variable-prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$variable-prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// stylelint-disable indentation\n\n// Utilities\n\n$utilities: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$utilities: map-merge(\n (\n // scss-docs-start utils-vertical-align\n \"align\": (\n property: vertical-align,\n class: align,\n values: baseline top middle bottom text-bottom text-top\n ),\n // scss-docs-end utils-vertical-align\n // scss-docs-start utils-float\n \"float\": (\n responsive: true,\n property: float,\n values: (\n start: left,\n end: right,\n none: none,\n )\n ),\n // scss-docs-end utils-float\n // Opacity utilities\n // scss-docs-start utils-opacity\n \"opacity\": (\n property: opacity,\n values: (\n 0: 0,\n 25: .25,\n 50: .5,\n 75: .75,\n 100: 1,\n )\n ),\n // scss-docs-end utils-opacity\n // scss-docs-start utils-overflow\n \"overflow\": (\n property: overflow,\n values: auto hidden visible scroll,\n ),\n // scss-docs-end utils-overflow\n // scss-docs-start utils-display\n \"display\": (\n responsive: true,\n print: true,\n property: display,\n class: d,\n values: inline inline-block block grid table table-row table-cell flex inline-flex none\n ),\n // scss-docs-end utils-display\n // scss-docs-start utils-shadow\n \"shadow\": (\n property: box-shadow,\n class: shadow,\n values: (\n null: $box-shadow,\n sm: $box-shadow-sm,\n lg: $box-shadow-lg,\n none: none,\n )\n ),\n // scss-docs-end utils-shadow\n // scss-docs-start utils-position\n \"position\": (\n property: position,\n values: static relative absolute fixed sticky\n ),\n \"top\": (\n property: top,\n values: $position-values\n ),\n \"bottom\": (\n property: bottom,\n values: $position-values\n ),\n \"start\": (\n property: left,\n class: start,\n values: $position-values\n ),\n \"end\": (\n property: right,\n class: end,\n values: $position-values\n ),\n \"translate-middle\": (\n property: transform,\n class: translate-middle,\n values: (\n null: translate(-50%, -50%),\n x: translateX(-50%),\n y: translateY(-50%),\n )\n ),\n // scss-docs-end utils-position\n // scss-docs-start utils-borders\n \"border\": (\n property: border,\n values: (\n null: $border-width solid $border-color,\n 0: 0,\n )\n ),\n \"border-top\": (\n property: border-top,\n values: (\n null: $border-width solid $border-color,\n 0: 0,\n )\n ),\n \"border-end\": (\n property: border-right,\n class: border-end,\n values: (\n null: $border-width solid $border-color,\n 0: 0,\n )\n ),\n \"border-bottom\": (\n property: border-bottom,\n values: (\n null: $border-width solid $border-color,\n 0: 0,\n )\n ),\n \"border-start\": (\n property: border-left,\n class: border-start,\n values: (\n null: $border-width solid $border-color,\n 0: 0,\n )\n ),\n \"border-color\": (\n property: border-color,\n class: border,\n values: map-merge($theme-colors, (\"white\": $white))\n ),\n \"border-width\": (\n property: border-width,\n class: border,\n values: $border-widths\n ),\n // scss-docs-end utils-borders\n // Sizing utilities\n // scss-docs-start utils-sizing\n \"width\": (\n property: width,\n class: w,\n values: (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n )\n ),\n \"max-width\": (\n property: max-width,\n class: mw,\n values: (100: 100%)\n ),\n \"viewport-width\": (\n property: width,\n class: vw,\n values: (100: 100vw)\n ),\n \"min-viewport-width\": (\n property: min-width,\n class: min-vw,\n values: (100: 100vw)\n ),\n \"height\": (\n property: height,\n class: h,\n values: (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n )\n ),\n \"max-height\": (\n property: max-height,\n class: mh,\n values: (100: 100%)\n ),\n \"viewport-height\": (\n property: height,\n class: vh,\n values: (100: 100vh)\n ),\n \"min-viewport-height\": (\n property: min-height,\n class: min-vh,\n values: (100: 100vh)\n ),\n // scss-docs-end utils-sizing\n // Flex utilities\n // scss-docs-start utils-flex\n \"flex\": (\n responsive: true,\n property: flex,\n values: (fill: 1 1 auto)\n ),\n \"flex-direction\": (\n responsive: true,\n property: flex-direction,\n class: flex,\n values: row column row-reverse column-reverse\n ),\n \"flex-grow\": (\n responsive: true,\n property: flex-grow,\n class: flex,\n values: (\n grow-0: 0,\n grow-1: 1,\n )\n ),\n \"flex-shrink\": (\n responsive: true,\n property: flex-shrink,\n class: flex,\n values: (\n shrink-0: 0,\n shrink-1: 1,\n )\n ),\n \"flex-wrap\": (\n responsive: true,\n property: flex-wrap,\n class: flex,\n values: wrap nowrap wrap-reverse\n ),\n \"gap\": (\n responsive: true,\n property: gap,\n class: gap,\n values: $spacers\n ),\n \"justify-content\": (\n responsive: true,\n property: justify-content,\n values: (\n start: flex-start,\n end: flex-end,\n center: center,\n between: space-between,\n around: space-around,\n evenly: space-evenly,\n )\n ),\n \"align-items\": (\n responsive: true,\n property: align-items,\n values: (\n start: flex-start,\n end: flex-end,\n center: center,\n baseline: baseline,\n stretch: stretch,\n )\n ),\n \"align-content\": (\n responsive: true,\n property: align-content,\n values: (\n start: flex-start,\n end: flex-end,\n center: center,\n between: space-between,\n around: space-around,\n stretch: stretch,\n )\n ),\n \"align-self\": (\n responsive: true,\n property: align-self,\n values: (\n auto: auto,\n start: flex-start,\n end: flex-end,\n center: center,\n baseline: baseline,\n stretch: stretch,\n )\n ),\n \"order\": (\n responsive: true,\n property: order,\n values: (\n first: -1,\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3,\n 4: 4,\n 5: 5,\n last: 6,\n ),\n ),\n // scss-docs-end utils-flex\n // Margin utilities\n // scss-docs-start utils-spacing\n \"margin\": (\n responsive: true,\n property: margin,\n class: m,\n values: map-merge($spacers, (auto: auto))\n ),\n \"margin-x\": (\n responsive: true,\n property: margin-right margin-left,\n class: mx,\n values: map-merge($spacers, (auto: auto))\n ),\n \"margin-y\": (\n responsive: true,\n property: margin-top margin-bottom,\n class: my,\n values: map-merge($spacers, (auto: auto))\n ),\n \"margin-top\": (\n responsive: true,\n property: margin-top,\n class: mt,\n values: map-merge($spacers, (auto: auto))\n ),\n \"margin-end\": (\n responsive: true,\n property: margin-right,\n class: me,\n values: map-merge($spacers, (auto: auto))\n ),\n \"margin-bottom\": (\n responsive: true,\n property: margin-bottom,\n class: mb,\n values: map-merge($spacers, (auto: auto))\n ),\n \"margin-start\": (\n responsive: true,\n property: margin-left,\n class: ms,\n values: map-merge($spacers, (auto: auto))\n ),\n // Negative margin utilities\n \"negative-margin\": (\n responsive: true,\n property: margin,\n class: m,\n values: $negative-spacers\n ),\n \"negative-margin-x\": (\n responsive: true,\n property: margin-right margin-left,\n class: mx,\n values: $negative-spacers\n ),\n \"negative-margin-y\": (\n responsive: true,\n property: margin-top margin-bottom,\n class: my,\n values: $negative-spacers\n ),\n \"negative-margin-top\": (\n responsive: true,\n property: margin-top,\n class: mt,\n values: $negative-spacers\n ),\n \"negative-margin-end\": (\n responsive: true,\n property: margin-right,\n class: me,\n values: $negative-spacers\n ),\n \"negative-margin-bottom\": (\n responsive: true,\n property: margin-bottom,\n class: mb,\n values: $negative-spacers\n ),\n \"negative-margin-start\": (\n responsive: true,\n property: margin-left,\n class: ms,\n values: $negative-spacers\n ),\n // Padding utilities\n \"padding\": (\n responsive: true,\n property: padding,\n class: p,\n values: $spacers\n ),\n \"padding-x\": (\n responsive: true,\n property: padding-right padding-left,\n class: px,\n values: $spacers\n ),\n \"padding-y\": (\n responsive: true,\n property: padding-top padding-bottom,\n class: py,\n values: $spacers\n ),\n \"padding-top\": (\n responsive: true,\n property: padding-top,\n class: pt,\n values: $spacers\n ),\n \"padding-end\": (\n responsive: true,\n property: padding-right,\n class: pe,\n values: $spacers\n ),\n \"padding-bottom\": (\n responsive: true,\n property: padding-bottom,\n class: pb,\n values: $spacers\n ),\n \"padding-start\": (\n responsive: true,\n property: padding-left,\n class: ps,\n values: $spacers\n ),\n // scss-docs-end utils-spacing\n // Text\n // scss-docs-start utils-text\n \"font-family\": (\n property: font-family,\n class: font,\n values: (monospace: var(--#{$variable-prefix}font-monospace))\n ),\n \"font-size\": (\n rfs: true,\n property: font-size,\n class: fs,\n values: $font-sizes\n ),\n \"font-style\": (\n property: font-style,\n class: fst,\n values: italic normal\n ),\n \"font-weight\": (\n property: font-weight,\n class: fw,\n values: (\n light: $font-weight-light,\n lighter: $font-weight-lighter,\n normal: $font-weight-normal,\n bold: $font-weight-bold,\n bolder: $font-weight-bolder\n )\n ),\n \"line-height\": (\n property: line-height,\n class: lh,\n values: (\n 1: 1,\n sm: $line-height-sm,\n base: $line-height-base,\n lg: $line-height-lg,\n )\n ),\n \"text-align\": (\n responsive: true,\n property: text-align,\n class: text,\n values: (\n start: left,\n end: right,\n center: center,\n )\n ),\n \"text-decoration\": (\n property: text-decoration,\n values: none underline line-through\n ),\n \"text-transform\": (\n property: text-transform,\n class: text,\n values: lowercase uppercase capitalize\n ),\n \"white-space\": (\n property: white-space,\n class: text,\n values: (\n wrap: normal,\n nowrap: nowrap,\n )\n ),\n \"word-wrap\": (\n property: word-wrap word-break,\n class: text,\n values: (break: break-word),\n rtl: false\n ),\n // scss-docs-end utils-text\n // scss-docs-start utils-color\n \"color\": (\n property: color,\n class: text,\n local-vars: (\n \"text-opacity\": 1\n ),\n values: map-merge(\n $utilities-text-colors,\n (\n \"muted\": $text-muted,\n \"black-50\": rgba($black, .5), // deprecated\n \"white-50\": rgba($white, .5), // deprecated\n \"reset\": inherit,\n )\n )\n ),\n \"text-opacity\": (\n css-var: true,\n class: text-opacity,\n values: (\n 25: .25,\n 50: .5,\n 75: .75,\n 100: 1\n )\n ),\n // scss-docs-end utils-color\n // scss-docs-start utils-bg-color\n \"background-color\": (\n property: background-color,\n class: bg,\n local-vars: (\n \"bg-opacity\": 1\n ),\n values: map-merge(\n $utilities-bg-colors,\n (\n \"transparent\": transparent\n )\n )\n ),\n \"bg-opacity\": (\n css-var: true,\n class: bg-opacity,\n values: (\n 10: .1,\n 25: .25,\n 50: .5,\n 75: .75,\n 100: 1\n )\n ),\n // scss-docs-end utils-bg-color\n \"gradient\": (\n property: background-image,\n class: bg,\n values: (gradient: var(--#{$variable-prefix}gradient))\n ),\n // scss-docs-start utils-interaction\n \"user-select\": (\n property: user-select,\n values: all auto none\n ),\n \"pointer-events\": (\n property: pointer-events,\n class: pe,\n values: none auto,\n ),\n // scss-docs-end utils-interaction\n // scss-docs-start utils-border-radius\n \"rounded\": (\n property: border-radius,\n class: rounded,\n values: (\n null: $border-radius,\n 0: 0,\n 1: $border-radius-sm,\n 2: $border-radius,\n 3: $border-radius-lg,\n circle: 50%,\n pill: $border-radius-pill\n )\n ),\n \"rounded-top\": (\n property: border-top-left-radius border-top-right-radius,\n class: rounded-top,\n values: (null: $border-radius)\n ),\n \"rounded-end\": (\n property: border-top-right-radius border-bottom-right-radius,\n class: rounded-end,\n values: (null: $border-radius)\n ),\n \"rounded-bottom\": (\n property: border-bottom-right-radius border-bottom-left-radius,\n class: rounded-bottom,\n values: (null: $border-radius)\n ),\n \"rounded-start\": (\n property: border-bottom-left-radius border-top-left-radius,\n class: rounded-start,\n values: (null: $border-radius)\n ),\n // scss-docs-end utils-border-radius\n // scss-docs-start utils-visibility\n \"visibility\": (\n property: visibility,\n class: null,\n values: (\n visible: visible,\n invisible: hidden,\n )\n )\n // scss-docs-end utils-visibility\n ),\n $utilities\n);\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$variable-prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$variable-prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$variable-prefix}white-rgb: #{to-rgb($white)};\n --#{$variable-prefix}black-rgb: #{to-rgb($black)};\n --#{$variable-prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$variable-prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n\n // Root and body\n // stylelint-disable custom-property-empty-line-before\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$variable-prefix}root-font-size: #{$font-size-root};\n }\n --#{$variable-prefix}body-font-family: #{$font-family-base};\n --#{$variable-prefix}body-font-size: #{$font-size-base};\n --#{$variable-prefix}body-font-weight: #{$font-weight-base};\n --#{$variable-prefix}body-line-height: #{$line-height-base};\n --#{$variable-prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$variable-prefix}body-text-align: #{$body-text-align};\n }\n --#{$variable-prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n // stylelint-enable custom-property-empty-line-before\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n font-size: var(--#{$variable-prefix}root-font-size);\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$variable-prefix}body-font-family);\n @include font-size(var(--#{$variable-prefix}body-font-size));\n font-weight: var(--#{$variable-prefix}body-font-weight);\n line-height: var(--#{$variable-prefix}body-line-height);\n color: var(--#{$variable-prefix}body-color);\n text-align: var(--#{$variable-prefix}body-text-align);\n background-color: var(--#{$variable-prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n// 2. Set correct height and prevent the `size` attribute to make the `hr` look like an input field\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n background-color: currentColor;\n border: 0;\n opacity: $hr-opacity;\n}\n\nhr:not([size]) {\n height: $hr-height; // 2\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-bs-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-bs-original-title] { // 1\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n text-decoration-skip-ink: none; // 4\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n\n &:hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n direction: ltr #{\"/* rtl:ignore */\"};\n unicode-bidi: bidi-override;\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-` +

+ + + + + +
+ + + +
+
+
+
+
+
+

Line chart

+ +
+
+
+
+
+
+

Bar chart

+ +
+
+
+
+
+
+
+
+

Area chart

+ +
+
+
+
+
+
+

Doughnut chart

+ +
+
+
+
+
+
+
+
+

Pie chart

+ +
+
+
+
+
+
+

Scatter chart

+ +
+
+
+
+
+ + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + diff --git a/static/admin/pages/forms/.DS_Store b/static/admin/pages/forms/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/static/admin/pages/forms/.DS_Store differ diff --git a/static/admin/pages/forms/basic_elements.html b/static/admin/pages/forms/basic_elements.html new file mode 100644 index 0000000..5fc5d37 --- /dev/null +++ b/static/admin/pages/forms/basic_elements.html @@ -0,0 +1,859 @@ + + + + + + + + RoyalUI Admin + + + + + + + + + + + + + +
+ + + +
+ + + +
+
+
+
+
+
+

Default form

+

+ Basic form layout +

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+
+
+
+
+

Horizontal Form

+

+ Horizontal form layout +

+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + +
+
+
+
+
+
+
+

Basic form elements

+

+ Basic form elements +

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + +
+
+
+ + +
+
+ + +
+ + +
+
+
+
+
+
+
+

Input size

+

+ Add classes like .form-control-lg and .form-control-sm. +

+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+
+

Select size

+

+ Add classes like .form-control-lg and .form-control-sm. +

+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+
+

Basic input groups

+

+ Basic bootstrap input groups +

+
+
+
+ @ +
+ +
+
+
+
+
+ $ +
+ +
+ .00 +
+
+
+
+
+
+ $ +
+
+ 0.00 +
+ +
+
+
+
+ +
+ +
+
+
+
+
+ + +
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+

Checkbox Controls

+

Checkbox and radio controls (default appearance is in primary color)

+
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+

Add class .form-check-{color} for checkbox and radio controls in theme colors

+
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+
+

Inline forms

+

+ Use the .form-inline class to display a series of labels, form controls, and buttons on a single horizontal row +

+
+ + + + +
+
+
@
+
+ +
+
+ +
+ +
+
+
+
+
+
+
+

Horizontal Two column

+
+

+ Personal info +

+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+
+
+

+ Address +

+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+ + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + diff --git a/static/admin/pages/icons/.DS_Store b/static/admin/pages/icons/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/static/admin/pages/icons/.DS_Store differ diff --git a/static/admin/pages/icons/themify.html b/static/admin/pages/icons/themify.html new file mode 100644 index 0000000..fbb3f8b --- /dev/null +++ b/static/admin/pages/icons/themify.html @@ -0,0 +1,620 @@ + + + + + + + + RoyalUI Admin + + + + + + + + + + + + + +
+ + + +
+ + + +
+
+
+
+
+
+

Arrows & direction icons

+
+
ti-arrow-up
+
ti-arrow-right
+
ti-arrow-left
+
ti-arrow-down
+
ti-arrows-vertical
+
ti-arrows-horizontal
+
ti-angle-up
+
ti-angle-right
+
ti-angle-left
+
ti-angle-down
+
ti-angle-double-up
+
ti-angle-double-right
+
ti-angle-double-left
+
ti-angle-double-down
+
ti-move
+
ti-fullscreen
+
ti-arrow-top-right
+
ti-arrow-top-left
+
ti-arrow-circle-up
+
ti-arrow-circle-right
+
ti-arrow-circle-left
+
ti-arrow-circle-down
+
ti-arrows-corner
+
ti-split-v
+
ti-split-v-alt
+
ti-split-h
+
ti-hand-point-up
+
ti-hand-point-right
+
ti-hand-point-left
+
ti-hand-point-down
+
ti-back-right
+
ti-back-left
+
ti-exchange-vertical
+
+
+
+
+
+
+
+

Web app icons

+
+
ti-wand
+
ti-save
+
ti-save-alt
+
ti-direction
+
ti-direction-alt
+
ti-user
+
ti-link
+
ti-unlink
+
ti-trash
+
ti-target
+
ti-tag
+
ti-desktop
+
ti-tablet
+
ti-mobile
+
ti-email
+
ti-star
+
ti-spray
+
ti-bar-chart-alt
+
ti-shopping-cart
+
ti-shopping-cart-full
+
ti-settings
+
ti-search
+
ti-zoom-in
+
ti-zoom-out
+
ti-cut
+
ti-ruler
+
ti-ruler-alt-2
+
ti-ruler-pencil
+
ti-ruler-alt
+
ti-bookmark
+
ti-bookmark-alt
+
ti-reload
+
ti-plus
+
ti-minus
+
ti-close
+
ti-pin
+
ti-pencil
+
ti-pencil-alt
+
ti-paint-roller
+
ti-paint-bucket
+
ti-na
+
ti-medall
+
ti-medall-alt
+
ti-marker
+
ti-marker-alt
+
ti-lock
+
ti-unlock
+
ti-location-arrow
+
ti-layout
+
ti-layers
+
ti-layers-alt
+
ti-key
+
ti-image
+
ti-heart
+
ti-heart-broken
+
ti-hand-stop
+
ti-hand-open
+
ti-hand-drag
+
ti-flag
+
ti-flag-alt
+
ti-flag-alt-2
+
ti-eye
+
ti-import
+
ti-export
+
ti-cup
+
ti-crown
+
ti-comments
+
ti-comment
+
ti-comment-alt
+
ti-thought
+
ti-clip
+
ti-check
+
ti-check-box
+
ti-camera
+
ti-announcement
+
ti-brush
+
ti-brush-alt
+
ti-palette
+
ti-briefcase
+
ti-bolt
+
ti-bolt-alt
+
ti-blackboard
+
ti-bag
+
ti-world
+
ti-wheelchair
+
ti-car
+
ti-truck
+
ti-timer
+
ti-ticket
+
ti-thumb-up
+
ti-thumb-down
+
ti-stats-up
+
ti-stats-down
+
ti-shine
+
ti-shift-right
+
ti-shift-left
+
ti-shift-right-alt
+
ti-shift-left-alt
+
ti-shield
+
ti-notepad
+
ti-server
+
ti-pulse
+
ti-printer
+
ti-power-off
+
ti-plug
+
ti-pie-chart
+
ti-panel
+
ti-package
+
ti-music
+
ti-music-alt
+
ti-mouse
+
ti-mouse-alt
+
ti-money
+
ti-microphone
+
ti-menu
+
ti-menu-alt
+
ti-map
+
ti-map-alt
+
ti-location-pin
+
ti-light-bulb
+
ti-info
+
ti-infinite
+
ti-id-badge
+
ti-hummer
+
ti-home
+
ti-help
+
ti-headphone
+
ti-harddrives
+
ti-harddrive
+
ti-gift
+
ti-game
+
ti-filter
+
ti-files
+
ti-file
+
ti-zip
+
ti-folder
+
ti-envelope
+
ti-dashboard
+
ti-cloud
+
ti-cloud-up
+
ti-cloud-down
+
ti-clipboard
+
ti-calendar
+
ti-book
+
ti-bell
+
ti-basketball
+
ti-bar-chart
+
ti-bar-chart-alt
+
ti-archive
+
ti-anchor
+
ti-alert
+
ti-alarm-clock
+
ti-agenda
+
ti-write
+
ti-wallet
+
ti-video-clapper
+
ti-video-camera
+
ti-vector
+
ti-support
+
ti-stamp
+
ti-slice
+
ti-shortcode
+
ti-receipt
+
ti-pin2
+
ti-pin-alt
+
ti-pencil-alt2
+
ti-eraser
+
ti-more
+
ti-more-alt
+
ti-microphone-alt
+
ti-magnet
+
ti-line-double
+
ti-line-dotted
+
ti-line-dashed
+
ti-ink-pen
+
ti-info-alt
+
ti-help-alt
+
ti-headphone-alt
+
ti-gallery
+
ti-face-smile
+
ti-face-sad
+
ti-credit-card
+
ti-comments-smiley
+
ti-time
+
ti-share
+
ti-share-alt
+
ti-rocket
+
ti-new-window
+
ti-rss
+
ti-rss-alt
+
+
+
+
+
+
+
+

Control icons

+
+
ti-control-stop
+
ti-control-shuffle
+
ti-control-play
+
ti-control-pause
+
ti-control-forward
+
ti-control-backward
+
ti-volume
+
ti-control-skip-forward
+
ti-control-skip-backward
+
ti-control-record
+
ti-control-eject
+
+
+
+
+
+
+
+

Text editor

+
+
ti-paragraph
+
ti-uppercase
+
ti-underline
+
ti-text
+
ti-Italic
+
ti-smallcap
+
ti-list
+
ti-list-ol
+
ti-align-right
+
ti-align-left
+
ti-align-justify
+
ti-align-center
+
ti-quote-right
+
ti-quote-left
+
+
+
+
+
+
+
+

Layout icons

+
+
ti-paragraph
+
ti-uppercase
+
ti-underline
+
ti-text
+
ti-Italic
+
ti-smallcap
+
ti-list
+
ti-list-ol
+
ti-align-right
+
ti-align-left
+
ti-align-justify
+
ti-align-center
+
ti-quote-right
+
ti-quote-left
+
+
+
+
+
+
+
+

Brand icons

+
+
ti-flickr
+
ti-flickr-alt
+
ti-instagram
+
ti-google
+
ti-github
+
ti-facebook
+
ti-dropbox
+
ti-dropbox-alt
+
ti-dribbble
+
ti-apple
+
ti-android
+
ti-yahoo
+
ti-trello
+
ti-stack-overflow
+
ti-soundcloud
+
ti-sharethis
+
ti-sharethis-alt
+
ti-reddit
+
ti-microsoft
+
ti-microsoft-alt
+
ti-linux
+
ti-jsfiddle
+
ti-joomla
+
ti-html5
+
ti-css3
+
ti-drupal
+
ti-wordpress
+
ti-tumblr
+
ti-tumblr-alt
+
ti-skype
+
ti-youtube
+
ti-vimeo
+
ti-vimeo-alt
+
ti-twitter
+
ti-twitter-alt
+
ti-linkedin
+
ti-pinterest
+
ti-pinterest-alt
+
ti-themify-logo
+
ti-themify-favicon
+
ti-themify-favicon-alt
+
+
+
+
+
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + diff --git a/static/admin/pages/samples/.DS_Store b/static/admin/pages/samples/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/static/admin/pages/samples/.DS_Store differ diff --git a/static/admin/pages/samples/lock-screen.html b/static/admin/pages/samples/lock-screen.html new file mode 100644 index 0000000..4f6edcb --- /dev/null +++ b/static/admin/pages/samples/lock-screen.html @@ -0,0 +1,61 @@ + + + + + + + + RoyalUI Admin + + + + + + + + + + + + + +
+
+
+
+
+
+ img +
+
+ + +
+
+ Unlock +
+ +
+
+
+
+
+ +
+ +
+ + + + + + + + + + + + + diff --git a/static/admin/pages/samples/login-2.html b/static/admin/pages/samples/login-2.html new file mode 100644 index 0000000..1be37ce --- /dev/null +++ b/static/admin/pages/samples/login-2.html @@ -0,0 +1,103 @@ + + + + + + + + RoyalUI Admin + + + + + + + + + + + + + +
+
+
+
+
+
+ +

Welcome back!

+
Happy to see you again!
+
+
+ +
+
+ + + +
+ +
+
+
+ +
+
+ + + +
+ +
+
+
+
+ +
+ Forgot password? +
+
+ LOGIN +
+
+ + +
+
+ Don't have an account? Create +
+
+
+
+ +
+
+ +
+ +
+ + + + + + + + + + + + + diff --git a/static/admin/pages/samples/login.html b/static/admin/pages/samples/login.html new file mode 100644 index 0000000..b28eb81 --- /dev/null +++ b/static/admin/pages/samples/login.html @@ -0,0 +1,81 @@ + + + + + + + + RoyalUI Admin + + + + + + + + + + + + + +
+
+
+
+
+
+ +

Hello! let's get started

+
Sign in to continue.
+
+
+ +
+
+ +
+
+ SIGN IN +
+
+
+ +
+ Forgot password? +
+
+ +
+
+ Don't have an account? Create +
+
+
+
+
+
+ +
+ +
+ + + + + + + + + + + + + diff --git a/static/admin/pages/samples/register-2.html b/static/admin/pages/samples/register-2.html new file mode 100644 index 0000000..8ba9384 --- /dev/null +++ b/static/admin/pages/samples/register-2.html @@ -0,0 +1,116 @@ + + + + + + + + RoyalUI Admin + + + + + + + + + + + + + +
+
+
+
+
+
+ +

New here?

+
Join us today! It takes only few steps
+
+
+ +
+
+ + + +
+ +
+
+
+ +
+
+ + + +
+ +
+
+
+ + +
+
+ +
+
+ + + +
+ +
+
+
+
+ +
+
+
+ SIGN UP +
+
+ Already have an account? Login +
+
+
+
+
+

Copyright © 2021 All rights reserved.

+
+
+
+ +
+ +
+ + + + + + + + + + + + + diff --git a/static/admin/pages/samples/register.html b/static/admin/pages/samples/register.html new file mode 100644 index 0000000..2497804 --- /dev/null +++ b/static/admin/pages/samples/register.html @@ -0,0 +1,88 @@ + + + + + + + + RoyalUI Admin + + + + + + + + + + + + + +
+
+
+
+
+
+ +

New here?

+
Signing up is easy. It only takes a few steps
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+
+ SIGN UP +
+
+ Already have an account? Login +
+
+
+
+
+
+ +
+ +
+ + + + + + + + + + + + + diff --git a/static/admin/pages/tables/.DS_Store b/static/admin/pages/tables/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/static/admin/pages/tables/.DS_Store differ diff --git a/static/admin/pages/tables/basic-table.html b/static/admin/pages/tables/basic-table.html new file mode 100644 index 0000000..28ab814 --- /dev/null +++ b/static/admin/pages/tables/basic-table.html @@ -0,0 +1,959 @@ + + + + + + + + RoyalUI Admin + + + + + + + + + + + +
+ + + +
+ + + +
+
+
+
+
+
+

Basic Table

+

+ Add class .table +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProfileVatNo.CreatedStatus
Jacob5327553112 May 2017
Messsy5327553215 May 2017
John5327553314 May 2017
Peter5327553416 May 2017
Dave5327553520 May 2017
+
+
+
+
+
+
+
+

Hoverable Table

+

+ Add class .table-hover +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UserProductSaleStatus
JacobPhotoshop 28.76%
MesssyFlash 21.06%
JohnPremier 35.00%
PeterAfter effects 82.00%
Dave53275535 98.05%
+
+
+
+
+
+
+
+

Striped Table

+

+ Add class .table-striped +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ User + + First name + + Progress + + Amount + + Deadline +
+ image + + Herman Beck + +
+
+
+
+ $ 77.99 + + May 15, 2015 +
+ image + + Messsy Adam + +
+
+
+
+ $245.30 + + July 1, 2015 +
+ image + + John Richards + +
+
+
+
+ $138.00 + + Apr 12, 2015 +
+ image + + Peter Meggik + +
+
+
+
+ $ 77.99 + + May 15, 2015 +
+ image + + Edward + +
+
+
+
+ $ 160.25 + + May 03, 2015 +
+ image + + John Doe + +
+
+
+
+ $ 123.21 + + April 05, 2015 +
+ image + + Henry Tom + +
+
+
+
+ $ 150.00 + + June 16, 2015 +
+
+
+
+
+
+
+
+

Bordered table

+

+ Add class .table-bordered +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ # + + First name + + Progress + + Amount + + Deadline +
+ 1 + + Herman Beck + +
+
+
+
+ $ 77.99 + + May 15, 2015 +
+ 2 + + Messsy Adam + +
+
+
+
+ $245.30 + + July 1, 2015 +
+ 3 + + John Richards + +
+
+
+
+ $138.00 + + Apr 12, 2015 +
+ 4 + + Peter Meggik + +
+
+
+
+ $ 77.99 + + May 15, 2015 +
+ 5 + + Edward + +
+
+
+
+ $ 160.25 + + May 03, 2015 +
+ 6 + + John Doe + +
+
+
+
+ $ 123.21 + + April 05, 2015 +
+ 7 + + Henry Tom + +
+
+
+
+ $ 150.00 + + June 16, 2015 +
+
+
+
+
+
+
+
+

Inverse table

+

+ Add class .table-dark +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ # + + First name + + Amount + + Deadline +
+ 1 + + Herman Beck + + $ 77.99 + + May 15, 2015 +
+ 2 + + Messsy Adam + + $245.30 + + July 1, 2015 +
+ 3 + + John Richards + + $138.00 + + Apr 12, 2015 +
+ 4 + + Peter Meggik + + $ 77.99 + + May 15, 2015 +
+ 5 + + Edward + + $ 160.25 + + May 03, 2015 +
+ 6 + + John Doe + + $ 123.21 + + April 05, 2015 +
+ 7 + + Henry Tom + + $ 150.00 + + June 16, 2015 +
+
+
+
+
+
+
+
+

Table with contextual classes

+

+ Add class .table-{color} +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ # + + First name + + Product + + Amount + + Deadline +
+ 1 + + Herman Beck + + Photoshop + + $ 77.99 + + May 15, 2015 +
+ 2 + + Messsy Adam + + Flash + + $245.30 + + July 1, 2015 +
+ 3 + + John Richards + + Premeire + + $138.00 + + Apr 12, 2015 +
+ 4 + + Peter Meggik + + After effects + + $ 77.99 + + May 15, 2015 +
+ 5 + + Edward + + Illustrator + + $ 160.25 + + May 03, 2015 +
+
+
+
+
+
+
+ + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + + diff --git a/static/admin/pages/ui-features/.DS_Store b/static/admin/pages/ui-features/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/static/admin/pages/ui-features/.DS_Store differ diff --git a/static/admin/pages/ui-features/buttons.html b/static/admin/pages/ui-features/buttons.html new file mode 100644 index 0000000..ff8e0fc --- /dev/null +++ b/static/admin/pages/ui-features/buttons.html @@ -0,0 +1,662 @@ + + + + + + + + RoyalUI Admin + + + + + + + + + + + +
+ + + +
+ + + +
+
+
+
+
+
+
+
+

Single color buttons

+

Add class .btn-{color} for buttons in theme colors

+
+ + + + + + + + + +
+
+
+
+
+

Rounded buttons

+

Add class .btn-rounded

+
+ + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+

Outlined buttons

+

Add class .btn-outline-{color} for outline buttons

+
+ + + + + + + + + +
+
+
+
+
+

Inverse buttons

+

Add class .btn-inverse-{color} for inverse buttons

+
+ + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+

Icon Buttons

+

Add class .btn-icon for buttons with only icons

+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+
+
+
+

Button Size

+

Use class .btn-{size}

+
+ + + +
+
+ + + +
+
+
+
+
+
+
+
+
+

Block buttons

+

Add class .btn-block

+
+ + + + +
+
+
+
+
+
+
+
+
+

Button groups

+

Wrap a series of buttons with .btn + in .btn-group

+
+
+ + + +
+
+ + + +
+
+
+
+ + + +
+
+ + + +
+
+
+
+ + + +
+
+ +
+ + +
+ +
+
+ + + +
+
+
+
+
+
+

Button with text and icon

+

Wrap icon and text inside .btn-icon-text and use .btn-icon-prepend + or .btn-icon-append for icon tags

+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + +
+
+
+
+
+
+
+
+
+

Social Icon Buttons

+

Add class .btn-social-icon

+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+
+
+
+
+
+

Social button with text

+

Add class .btn-social-icon-text

+
+ + + + + + +
+
+
+
+
+
+ + + + +
+ +
+ +
+ + + + + + + + + + + + + diff --git a/static/admin/pages/ui-features/typography.html b/static/admin/pages/ui-features/typography.html new file mode 100644 index 0000000..d1dfaf4 --- /dev/null +++ b/static/admin/pages/ui-features/typography.html @@ -0,0 +1,716 @@ + + + + + + + + RoyalUI Admin + + + + + + + + + + + + + +
+ + + +
+ + + +
+
+
+
+
+
+

Headings

+

+ Add tags <h1> to <h6> or class .h1 to .h6 +

+
+

h1. Heading

+

h2. Heading

+

h3. Heading

+

h4. Heading

+
h5. Heading
+
h6. Heading
+
+
+
+
+
+
+
+

Headings with secondary text

+

+ Add faded secondary text to headings +

+
+

+ h1. Heading + + Secondary text + +

+

+ h2. Heading + + Secondary text + +

+

+ h3. Heading + + Secondary text + +

+

+ h4. Heading + + Secondary text + +

+
+ h5. Heading + + Secondary text + +
+
+ h6. Heading + + Secondary text + +
+
+
+
+
+
+
+
+

Display headings

+

+ Add class .display1 to .display-4 +

+
+

Display 1

+

Display 2

+

Display 3

+

Display 4

+
+
+
+
+
+
+
+
+
+

Paragraph

+

+ Write text in <p> tag +

+

+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. + Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, + when an unknown printer took a galley not only five centuries, +

+
+
+
+
+
+
+

Icon size

+

+ Add class .icon-lg, .icon-md, .icon-sm +

+
+
+
+ +

+ Icon-lg +

+
+
+
+
+ +

+ Icon-md +

+
+
+
+
+ +

+ Icon-sm +

+
+
+
+
+
+
+
+
+
+
+
+

Blockquotes

+

+ Wrap content inside<blockquote class="blockquote"> +

+
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

+
+
+
+
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

+
Someone famous in Source Title
+
+
+
+
+
+
+
+

Address

+

+ Use <address> tag +

+
+
+
+

RoyalUI inc.

+

+ 695 lsom Ave, +

+

+ Suite 00 +

+

+ San Francisco, CA 94107 +

+
+
+
+
+

+ E-mail +

+

+ johndoe@examplemeail.com +

+

+ Web Address +

+

+ www.RoyalUI.com +

+
+
+
+
+
+

Lead

+

+ Use class .lead +

+

+ Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. +

+
+
+
+
+
+
+

Text colors

+

+ Use class .text-primary, .text-secondary etc. for text in theme colors +

+
+
+

.text-primary

+

.text-success

+

.text-danger

+

.text-warning

+

.text-info

+
+
+

.text-light

+

.text-secondary

+

.text-dark

+

.text-muted

+

.text-white

+
+
+
+
+
+
+
+
+

Top aligned media

+
+ +
+

Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque.

+
+
+
+
+
+
+
+
+

Center aligned media

+
+ +
+

Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque.

+
+
+
+
+
+
+
+
+

Bottom aligned media

+
+ +
+

Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque.

+
+
+
+
+
+
+
+
+

Highlighted Text

+

+ Wrap the text in <mark> to highlight text +

+

+ It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution +

+
+
+
+
+
+
+

List Unordered

+
    +
  • Lorem ipsum dolor sit amet
  • +
  • Consectetur adipiscing elit
  • +
  • Integer molestie lorem at massa
  • +
  • Facilisis in pretium nisl aliquet
  • +
  • Nulla volutpat aliquam velit
  • +
+
+
+
+
+
+
+

Bold text

+

+ Use class.font-weight-bold +

+

+ It is a long established fact that a reader will be distracted by the readable content + of a page when looking at its layout. The point of using Lorem Ipsum is that it has a + more-or-less normal distribution +

+
+
+
+
+
+
+

List Ordered

+
    +
  1. Lorem ipsum dolor sit amet
  2. +
  3. Consectetur adipiscing elit
  4. +
  5. Integer molestie lorem at massa
  6. +
  7. Facilisis in pretium nisl aliquet
  8. +
  9. Nulla volutpat aliquam velit>
  10. +
+
+
+
+
+
+
+

Underline

+

+ Wrap in <u> tag for underline +

+

+ lorem ipsum dolor sit amet, consectetur + mod tempor incididunt ut labore et dolore + magna aliqua. +

+
+
+

Lowercase

+

+ Use class .text-lowercase +

+

+ lorem ipsum dolor sit amet, consectetur + mod tempor incididunt ut labore et dolore + magna aliqua. +

+
+
+

Uppercase

+

+ Use class .text-uppercase +

+

+ lorem ipsum dolor sit amet, consectetur + mod tempor incididunt ut labore et dolore + magna aliqua. +

+
+
+
+
+
+
+

Mute

+

+ Use class .text-muted +

+

+ lorem ipsum dolor sit amet, consectetur + mod tempor incididunt ut labore et dolore + magna aliqua. +

+
+
+

Strike

+

+ Wrap content in <del> tag +

+

+ + lorem ipsum dolor sit amet, consectetur + mod tempor incididunt ut labore et dolore + magna aliqua. + +

+
+
+

Capitalized

+

+ Use class .text-capitalize +

+

+ lorem ipsum dolor sit amet, consectetur + mod tempor incididunt ut labore et dolore + magna aliqua. +

+
+
+
+
+
+
+

List with icon

+

Add class .list-ticked to <ul>

+
    +
  • Lorem ipsum dolor sit amet
  • +
  • Consectetur adipiscing elit
  • +
  • Integer molestie lorem at massa
  • +
  • Facilisis in pretium nisl aliquet
  • +
  • Nulla volutpat aliquam velit>
  • +
+
+
+
+
+
+
+

List with icon

+

Add class .list-arrow to <ul>

+
    +
  • Lorem ipsum dolor sit amet
  • +
  • Consectetur adipiscing elit
  • +
  • Integer molestie lorem at massa
  • +
  • Facilisis in pretium nisl aliquet
  • +
  • Nulla volutpat aliquam velit>
  • +
+
+
+
+
+
+
+

List with icon

+

Add class .list-star to <ul>

+
    +
  • Lorem ipsum dolor sit amet
  • +
  • Consectetur adipiscing elit
  • +
  • Integer molestie lorem at massa
  • +
  • Facilisis in pretium nisl aliquet
  • +
  • Nulla volutpat aliquam velit>
  • +
+
+
+
+
+
+ + + + +
+ +
+ +
+ + + + + + + + + + + + + + + + + diff --git a/static/admin/partials/.DS_Store b/static/admin/partials/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/static/admin/partials/.DS_Store differ diff --git a/static/admin/partials/_footer.html b/static/admin/partials/_footer.html new file mode 100644 index 0000000..05cc0d6 --- /dev/null +++ b/static/admin/partials/_footer.html @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/static/admin/partials/_navbar.html b/static/admin/partials/_navbar.html new file mode 100644 index 0000000..81fa9ff --- /dev/null +++ b/static/admin/partials/_navbar.html @@ -0,0 +1,135 @@ + \ No newline at end of file diff --git a/static/admin/partials/_sidebar.html b/static/admin/partials/_sidebar.html new file mode 100644 index 0000000..217682d --- /dev/null +++ b/static/admin/partials/_sidebar.html @@ -0,0 +1,69 @@ + \ No newline at end of file diff --git a/static/admin/scss/.DS_Store b/static/admin/scss/.DS_Store new file mode 100644 index 0000000..c7e7f88 Binary files /dev/null and b/static/admin/scss/.DS_Store differ diff --git a/static/admin/scss/_background.scss b/static/admin/scss/_background.scss new file mode 100644 index 0000000..76fbf9e --- /dev/null +++ b/static/admin/scss/_background.scss @@ -0,0 +1,11 @@ +@each $color, $value in $social-colors { + .bg-#{$color} { + background: social-color($color); + } +} + +@each $color, $value in $theme-gradient-colors { + .bg-gradient-#{$color} { + background: $value; + } +} \ No newline at end of file diff --git a/static/admin/scss/_demo.scss b/static/admin/scss/_demo.scss new file mode 100644 index 0000000..83cf3ca --- /dev/null +++ b/static/admin/scss/_demo.scss @@ -0,0 +1,170 @@ +/* Demo Styles */ +// Add spacing to Boostrap components for demo purpose +.template-demo { + > .btn { + @extend .mt-3; + @extend .me-2; + } + + > .btn-group, + > .btn-group-vertical { + @extend .mt-2; + @extend .me-2; + } + + .progress { + margin-top: 1.5rem; + } + + > h2, + > h3, + > h4, + > h5, + > h6, + > h1 { + border-top: 1px solid $border-color; + padding: 0.5rem 0 0; + } + + > .dropdown { + display: inline-block; + @extend .me-2; + margin-bottom: 0.5rem; + } +} + +.chartjs-legend { + ul { + margin-bottom: 0; + list-style: none; + padding-left: 0; + @include display-flex; + @include align-items(flex-end); + @include flex-direction(column); + @include flex-wrap(wrap); + li { + @include display-flex; + @include align-items(center); + span { + width: 2.25rem; + height: 1rem; + margin-right: .4rem; + display: inline-block; + font-size: $default-font-size; + } + } + } + .rtl & { + ul { + padding-right: 0; + li { + margin-right: 0; + margin-left: 8%; + span { + margin-right: 0; + margin-left: 1rem; + } + } + } + } + &.analytics-legend { + ul { + padding-left: 0; + } + } +} + +.documentation { + padding-top: 0; + max-width: 100%; + .content-wrapper { + padding-top: 0; + min-height: calc(100vh - #{$footer-height}); + } +} + +.doc-header { + position: fixed; + padding-top: 24px; + padding-bottom: 24px; + z-index: 2; + background: $content-bg; +} + +.doc-content { + padding-top: 157px; +} + +.show { + > .btn-out-line-light { + .dropdown-toggle { + &:focus { + box-shadow: none; + } + } + } +}#proBanner { + position: fixed; + left: 0; + top: 0; + width: 100%; + z-index: 9999; + background: #000; + .card-body-padding { + padding-top: .55rem ; + padding-bottom: .55rem; + padding-left: 2rem; + padding-right: 2rem; + @media (max-width: 766px) { + padding-left: 1rem; + padding-right: 1rem; + } + } + .buy-now-text { + color: $white; + @media (max-width: 766px) { + font-size: 10px; + line-height: 1.5; + } + } + .btn { + &.buy-now-btn { + background: transparent; + color: #88b6ff; + border-radius: 10px; + // padding: 0.625rem 1.25rem; + padding: 1rem 0; + border-radius: 4px; + font-weight: bold; + font-size: 1rem; + @media (max-width: 766px) { + min-width: 80px; + padding: 1rem .5rem; + font-size: 12px; + } + } + &#bannerClose { + i { + margin-right: 1rem; + font-size: 1.25rem; + @media (max-width: 766px) { + font-size: 1rem; + margin-right: 0; + } + } + } + } + a { + text-decoration: none; + i { + font-size: 1.25rem; + @media (max-width: 766px) { + font-size: 1rem; + } + } + } + +} +.proBanner-padding-top { + padding-top: $buy-nowbanner-padding-top !important; +} \ No newline at end of file diff --git a/static/admin/scss/_fonts.scss b/static/admin/scss/_fonts.scss new file mode 100644 index 0000000..fcb252d --- /dev/null +++ b/static/admin/scss/_fonts.scss @@ -0,0 +1,55 @@ +@font-face { + font-family: 'Roboto'; + src: url('../fonts/Roboto/Roboto-Light.eot'); + src: url('../fonts/Roboto/Roboto-Light.eot?#iefix') format('embedded-opentype'), + url('../fonts/Roboto/Roboto-Light.woff2') format('woff2'), + url('../fonts/Roboto/Roboto-Light.woff') format('woff'), + url('../fonts/Roboto/Roboto-Light.ttf') format('truetype'); + font-weight: 300; + font-style: normal; +} + +@font-face { + font-family: 'Roboto'; + src: url('../fonts/Roboto/Roboto-Bold.eot'); + src: url('../fonts/Roboto/Roboto-Bold.eot?#iefix') format('embedded-opentype'), + url('../fonts/Roboto/Roboto-Bold.woff2') format('woff2'), + url('../fonts/Roboto/Roboto-Bold.woff') format('woff'), + url('../fonts/Roboto/Roboto-Bold.ttf') format('truetype'); + font-weight: bold; + font-style: normal; +} + +@font-face { + font-family: 'Roboto'; + src: url('../fonts/Roboto/Roboto-Medium.eot'); + src: url('../fonts/Roboto/Roboto-Medium.eot?#iefix') format('embedded-opentype'), + url('../fonts/Roboto/Roboto-Medium.woff2') format('woff2'), + url('../fonts/Roboto/Roboto-Medium.woff') format('woff'), + url('../fonts/Roboto/Roboto-Medium.ttf') format('truetype'); + font-weight: 500; + font-style: normal; +} + +@font-face { + font-family: 'Roboto'; + src: url('../fonts/Roboto/Roboto-Regular.eot'); + src: url('../fonts/Roboto/Roboto-Regular.eot?#iefix') format('embedded-opentype'), + url('../fonts/Roboto/Roboto-Regular.woff2') format('woff2'), + url('../fonts/Roboto/Roboto-Regular.woff') format('woff'), + url('../fonts/Roboto/Roboto-Regular.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'Roboto'; + src: url('../fonts/Roboto/Roboto-Black.eot'); + src: url('../fonts/Roboto/Roboto-Black.eot?#iefix') format('embedded-opentype'), + url('../fonts/Roboto/Roboto-Black.woff2') format('woff2'), + url('../fonts/Roboto/Roboto-Black.woff') format('woff'), + url('../fonts/Roboto/Roboto-Black.ttf') format('truetype'); + font-weight: 900; + font-style: normal; +} + diff --git a/static/admin/scss/_footer.scss b/static/admin/scss/_footer.scss new file mode 100644 index 0000000..68b8960 --- /dev/null +++ b/static/admin/scss/_footer.scss @@ -0,0 +1,23 @@ +/* Footer */ + +.footer { + background: $footer-bg; + color: $footer-color; + padding: 30px 2.45rem; + transition: all $action-transition-duration $action-transition-timing-function; + -moz-transition: all $action-transition-duration $action-transition-timing-function; + -webkit-transition: all $action-transition-duration $action-transition-timing-function; + -ms-transition: all $action-transition-duration $action-transition-timing-function; + font-size: calc(#{$default-font-size} - 0.05rem); + font-family: $type; + font-weight: 400; + border-top: 1px solid rgba($black, .06); + a { + color: $primary; + font-size: inherit; + } + @media (max-width: 991px) { + margin-left: 0; + width: 100%; + } +} diff --git a/static/admin/scss/_functions.scss b/static/admin/scss/_functions.scss new file mode 100644 index 0000000..6bad1ac --- /dev/null +++ b/static/admin/scss/_functions.scss @@ -0,0 +1,4 @@ +// Functions +@function social-color($key: "twitter") { + @return map-get($social-colors, $key); +} \ No newline at end of file diff --git a/static/admin/scss/_layouts.scss b/static/admin/scss/_layouts.scss new file mode 100644 index 0000000..0a9ec35 --- /dev/null +++ b/static/admin/scss/_layouts.scss @@ -0,0 +1,197 @@ +/* Layouts */ + +// Sidebar Icon Only +.sidebar-icon-only { + @media (min-width: 992px) { + .navbar { + .navbar-brand-wrapper { + width: $sidebar-width-icon; + .brand-logo { + display: none; + } + .brand-logo-mini { + display: inline-block; + } + } + .navbar-menu-wrapper { + width: calc(100% - #{$sidebar-width-icon}); + } + } + .sidebar { + width: $sidebar-width-icon; + .nav { + overflow: visible; + margin-left: 0; + margin-right: 0; + .nav-item { + position: relative; + .nav-link { + display: block; + padding-left: .5rem; + padding-right: .5rem; + text-align: center; + position: static; + .menu-title, + .badge,.menu-sub-title { + display: none; + } + .menu-title { + @include border-radius(0 5px 5px 0px); + background: $sidebar-light-menu-hover-bg; + + @at-root #{selector-append(".rtl", &)} { + @include border-radius(5px 0 0 5px); + } + } + i { + &.menu-icon { + margin-right: 0; + margin-left: 0; + margin-bottom: 0; + } + &.menu-arrow { + display: none; + } + } + &[aria-expanded] { + .menu-title { + @include border-radius(0 5px 0 0px); + @at-root #{selector-append(".rtl", &)} { + @include border-radius(5px 0 0 0); + } + } + } + } + .collapse { + display: none; + } + &.hover-open { + .nav-link { + .menu-title { + @include display-flex; + @include align-items(center); + background: $sidebar-light-menu-hover-bg; + padding: 0.5rem 1.4rem; + left: $sidebar-width-icon; + position: absolute; + text-align: left; + top: 0; + bottom: 0; + width: $icon-only-collapse-width; + z-index: 1; + line-height: 1.8; + -webkit-box-shadow: 4px 0px 7px 0px rgba(182, 185, 189, 0.25); + box-shadow: 4px 0px 7px 0px rgba(182, 185, 189, 0.25); + @at-root #{selector-append(".rtl", &)} { + left: auto; + right: $sidebar-width-icon; + text-align: left; + -webkit-box-shadow: -4px 0px 7px 0px rgba(182, 185, 189, 0.25); + box-shadow: -4px 0px 7px 0px rgba(182, 185, 189, 0.25); + } + &:after { + display: none; + } + } + &:hover { + .menu-title { + background: $sidebar-light-menu-hover-bg; + } + } + } + .collapse, + .collapsing { + display: block; + background: $icon-only-menu-bg-light; + @include border-radius(0 0 5px 0); + position: absolute; + left: $sidebar-width-icon; + width: $icon-only-collapse-width; + -webkit-box-shadow: 4px 4px 7px 0px rgba(182, 185, 189, 0.25); + box-shadow: 4px 4px 7px 0px rgba(182, 185, 189, 0.25); + @at-root #{selector-append(".rtl", &)} { + left: auto; + right:$sidebar-width-icon; + @include border-radius(0 0 0 5px); + -webkit-box-shadow: -4px 4px 7px 0px rgba(182, 185, 189, 0.25); + box-shadow: -4px 4px 7px 0px rgba(182, 185, 189, 0.25); + } + } + } + } + &:not(.sub-menu) { + .nav-item { + &.active { + border-radius: 0; + } + &:hover { + .nav-link { + border-radius: 0; + } + } + } + } + &.sub-menu { + padding: $sidebar-icon-only-submenu-padding; + .nav-item { + .nav-link { + text-align: left; + padding-left: 20px; + } + } + } + } + } + + .main-panel { + width: calc(100% - #{$sidebar-width-icon}); + } + } +} + +//RTL layout +.rtl { + direction: rtl; + text-align: right; + + .sidebar { + .nav { + padding-right: 0; + &.sub-menu { + padding: $rtl-sidebar-submenu-padding; + @at-root #{selector-append(".sidebar-icon-only", &)} { + padding-right: 0rem; + .nav-item { + .nav-link { + padding-right: 3rem; + text-align: right; + &:before { + right: 1.75rem; + } + } + } + } + } + } + } + + .product-chart-wrapper, + .tab-content .tab-pane .scroll-wrapper, + .sidebar-fixed .nav, + .table-responsive, + ul.chats { + &::-webkit-scrollbar { + width: 0.5em; + } + + &::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); + box-shadow: inset 0 0 6px rgba(0,0,0,0.3); + } + + &::-webkit-scrollbar-thumb { + background-color: darkgrey; + outline: 1px solid slategrey; + } + } +} diff --git a/static/admin/scss/_misc.scss b/static/admin/scss/_misc.scss new file mode 100644 index 0000000..9dc8e40 --- /dev/null +++ b/static/admin/scss/_misc.scss @@ -0,0 +1,31 @@ +/* Miscellanoeous */ +body, +html { + overflow-x: hidden; + padding-right: 0 !important; // resets padding right added by Bootstrap modal +} + +*:-moz-full-screen, +*:-webkit-full-screen, +*:fullscreen *:-ms-fullscreen { + overflow: auto; +} + +.container-scroller { + overflow: hidden; +} + +pre { + background: color(gray-lighter); + padding: 15px; + font-size: 14px; +} + +code { + padding: 5px; + color: $danger; + font-family: $type; + font-weight: 300; + font-size: $default-font-size; + border-radius: 4px; +} \ No newline at end of file diff --git a/static/admin/scss/_navbar.scss b/static/admin/scss/_navbar.scss new file mode 100644 index 0000000..1dead7b --- /dev/null +++ b/static/admin/scss/_navbar.scss @@ -0,0 +1,340 @@ +/* Navbar */ + +.navbar { + font-weight: 400; + transition: background $action-transition-duration $action-transition-timing-function; + -webkit-transition: background $action-transition-duration $action-transition-timing-function; + -moz-transition: background $action-transition-duration $action-transition-timing-function; + -ms-transition: background $action-transition-duration $action-transition-timing-function; + -webkit-box-shadow: $navbar-box-shadow; + -moz-box-shadow: $navbar-box-shadow; + box-shadow: $navbar-box-shadow; + + .navbar-brand-wrapper { + background: $white; + transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function; + -webkit-transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function; + -moz-transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function; + -ms-transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function; + width: $sidebar-width-lg; + height: $navbar-height; + .navbar-brand { + color: lighten($gray-dark, 20%); + font-size: 1.5rem; + margin-right: 0; + padding: .25rem 0; + + &.brand-logo-mini { + display: none; + } + + &:active, + &:focus, + &:hover { + color: lighten($gray-dark, 10%); + } + + img { + width: calc(#{$sidebar-width-lg} - 130px ); + max-width: 100%; + height: 34px; + margin: auto; + vertical-align: middle; + } + } + + .brand-logo-mini { + padding-left: 0; + text-align: center; + img { + width: calc(#{$sidebar-width-icon} - 30px ); + max-width: 100%; + margin: auto; + height: 30px; + } + } + } + + .navbar-menu-wrapper { + background: $navbar-default-bg; + transition: width $action-transition-duration $action-transition-timing-function; + -webkit-transition: width $action-transition-duration $action-transition-timing-function; + -moz-transition: width $action-transition-duration $action-transition-timing-function; + -ms-transition: width $action-transition-duration $action-transition-timing-function; + color: $navbar-menu-color; + padding-left: 2.55rem; + padding-right: 2.55rem; + width: calc(100% - #{$sidebar-width-lg}); + height: $navbar-height; + @media (max-width: 991px) { + width: calc(100% - 55px); + padding-left: 15px; + padding-right: 11px; + } + + .navbar-toggler { + border: 0; + color: inherit; + font-size: 1.25rem; + padding: 0; + border-radius: 0; + &:focus { + box-shadow: none; + } + &:not(.navbar-toggler-right) { + @media (max-width: 991px) { + display: none; + } + } + &.navbar-toggler-right{ + @media (max-width:991px){ + padding-left: 15px; + padding-right: 0; + } + } + } + + .navbar-nav { + @extend .d-flex; + @extend .flex-row; + @extend .align-items-center; + .nav-item { + margin-left: 1rem; + margin-right: 1rem; + &:last-child { + margin-right: 0; + } + .nav-link { + color: inherit; + font-size: $navbar-font-size; + } + &.nav-search { + margin-left: 2rem; + .input-group { + padding: 0 1.1rem; + width: 400px; + border: 1px solid $border-color; + border-radius: 2rem; + align-items: center; + .form-control, + .input-group-text { + background: transparent; + border: 0; + color: $black; + padding: 0; + } + .input-group-text { + i { + font-size: 1.25rem; + color: $navbar-menu-color; + } + } + .form-control { + margin-left: .7rem; + border-radius: 1rem; + height: 2.58rem; + @include placeholder { + color: #6c7383; + } + } + } + } + &.nav-settings { + @extend .align-self-stretch; + @extend .align-items-center; + margin: 0; + .nav-link { + padding: 0; + text-align: center; + } + i { + font-size: 1.25rem; + vertical-align: middle; + } + } + &.nav-profile { + @extend .d-flex; + @extend .align-items-center; + margin-left: .2rem; + img { + width: 40px; + height: 40px; + border-radius: 100%; + } + &.dropdown { + .dropdown-toggle { + &:after { + display: none; + } + } + } + } + &.dropdown { + .dropdown-menu { + @extend .dropdownAnimation; + border: none; + -webkit-box-shadow: 0px 3px 21px 0px rgba(0, 0, 0, 0.2); + box-shadow: 0px 3px 21px 0px rgba(0, 0, 0, 0.2); + } + .navbar-dropdown { + position: absolute; + font-size: 0.9rem; + margin-top: 0; + right: 0; + left: auto; + top: 70px; + .rtl & { + right: auto; + left: 0; + } + .dropdown-item { + @extend .d-flex; + @extend .align-items-center; + margin-bottom: 0; + padding: 0.687rem 1.562rem; + cursor: pointer; + .item-thumbnail { + img { + width: 2.25rem; + height: 2.25rem; + border-radius: 50%; + } + .item-icon { + width: 2.25rem; + height: 2.25rem; + border-radius: 50%; + @extend .d-flex; + @extend .align-items-center; + @extend .justify-content-center; + color: $white; + i { + font-size: 17px; + } + } + } + .item-content { + padding-left: 0.937rem; + } + + .badge { + margin-left: 2.5rem; + } + .ellipsis { + max-width: 200px; + overflow: hidden; + text-overflow: ellipsis; + } + .rtl & { + i { + @extend .me-0; + margin-left: 10px; + } + .badge { + margin-left: 0; + margin-right: 2.5rem; + } + } + } + + .dropdown-divider { + margin: 0; + } + } + i { + margin-right: .5rem; + vertical-align: middle; + } + @media (max-width: 991px) { + position: static; + .navbar-dropdown { + left: 20px; + right: 20px; + top: $navbar-height; + width: calc(100% - 40px); + } + } + .count-indicator { + position: relative; + padding: 0; + text-align: center; + i { + font-size: 1.25rem; + margin-right: 0; + vertical-align: middle; + } + .count { + position: absolute; + left: 55%; + width: 12px; + height: 12px; + border-radius: 100%; + background: $primary; + top: 1px; + border: 1px solid $white; + } + &:after { + display: none; + } + } + } + } + &.navbar-nav-right { + @extend .align-self-stretch; + @extend .align-items-stretch; + .nav-item { + @extend .d-flex; + @extend .align-items-center; + &.nav-settings { + @extend .d-none; + @extend .d-lg-flex; + } + } + @media (min-width: 992px) { + margin-left: auto; + .rtl & { + margin-left: 0; + margin-right: auto; + } + } + } + } + } + +} +@media (max-width:991px) { + .navbar { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + .navbar-brand-wrapper { + width: 55px; + .navbar-brand { + &.brand-logo { + display: none; + } + &.brand-logo-mini { + display: inline-block; + } + } + } + } + + .navbar-collapse { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + margin-top: 0.5rem; + } +} + +@media (max-width:480px) { + .navbar { + .navbar-brand-wrapper { + width: 55px; + .brand-logo-mini{ + padding-top: 0px; + } + } + } +} \ No newline at end of file diff --git a/static/admin/scss/_reset.scss b/static/admin/scss/_reset.scss new file mode 100644 index 0000000..b2615fa --- /dev/null +++ b/static/admin/scss/_reset.scss @@ -0,0 +1,131 @@ +/* Reset Styles */ + +body { + padding: 0; + margin: 0; + overflow-x: hidden; +} + +.form-control { + &, + &:focus { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + outline: 0; + } +} + +a, +div, +h1, +h2, +h3, +h4, +h5, +p, +span { + text-shadow: none +} + +[type=button]:focus, +a:active, +a:focus, +a:visited, +button::-moz-focus-inner, +input[type=reset]::-moz-focus-inner, +input[type=button]::-moz-focus-inner, +input[type=submit]::-moz-focus-inner, +input[type=file]>input[type=button]::-moz-focus-inner, +select::-moz-focus-inner { + outline: 0 +} + +input, +.form-control:focus, +input:focus, +select:focus, +textarea:focus, +button:focus { + outline: none; + outline-width: 0; + outline-color: transparent; + box-shadow: none; + outline-style: none; +} + +textarea { + resize: none; + overflow-x: hidden; +} + +.btn, +.btn-group.open .dropdown-toggle, +.btn:active, +.btn:focus, +.btn:hover, +.btn:visited, +a, +a:active, +a:checked, +a:focus, +a:hover, +a:visited, +body, +button, +button:active, +button:hover, +button:visited, +div, +input, +input:active, +input:focus, +input:hover, +input:visited, +select, +select:active, +select:focus, +select:visited, +textarea, +textarea:active, +textarea:focus, +textarea:hover, +textarea:visited { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none +} + +.btn.active.focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn:active:focus, +.btn:focus, +button, +button:active, +button:checked, +button:focus, +button:hover, +button:visited { + outline: 0; + outline-offset: 0 +} + +.bootstrap-select .dropdown-toggle:focus { + outline: 0 ; + outline-offset: 0; +} + +.dropdown-menu>li>a:active, +.dropdown-menu>li>a:focus, +.dropdown-menu>li>a:hover, +.dropdown-menu>li>a:visited { + outline: 0; +} + +a:focus, +input:focus { + border-color: transparent; + outline: none +} diff --git a/static/admin/scss/_sidebar.scss b/static/admin/scss/_sidebar.scss new file mode 100644 index 0000000..50a635d --- /dev/null +++ b/static/admin/scss/_sidebar.scss @@ -0,0 +1,212 @@ +/* Sidebar */ + +.sidebar { + min-height: calc(100vh - #{$navbar-height}); + background: $sidebar-light-bg; + font-family: $type; + font-weight: 500; + padding: 0; + width: $sidebar-width-lg; + z-index: 11; + transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function; + -webkit-transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function; + -moz-transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function; + -ms-transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function; + + .nav { + overflow: hidden; + flex-wrap: nowrap; + flex-direction: column; + margin-bottom: 60px; + + .nav-item { + @include transition-duration(0.25s); + transition-property: background; + -webkit-transition-property: background; + .collapse { + z-index: 999; + } + + .nav-link { + @include display-flex; + @include align-items(center); + white-space: nowrap; + padding: $sidebar-menu-padding-top $sidebar-menu-padding-right $sidebar-menu-padding-bottom $sidebar-menu-padding-left; + color: $sidebar-light-menu-color; + @include transition-duration(0.45s); + transition-property: color; + -webkit-transition-property: color; + + i { + color: inherit; + + &.menu-icon { + font-size: $sidebar-icon-font-size; + line-height: 1; + margin-right: 1rem; + .rtl & { + margin-left: 2rem; + margin-right: 0; + } + color: $sidebar-light-menu-icon-color; + &:before { + vertical-align: middle; + } + } + &.menu-arrow { + display: inline-block; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + margin-left: auto; + margin-right: 0; + color: $sidebar-light-menu-arrow-color; + .rtl & { + margin-left: 0; + margin-right: auto; + } + + &:before { + content: "\e649"; + font-family: "themify"; + font-style: normal; + display: block; + font-size: 0.687rem; + line-height: 10px; + @include transition(all .2s ease-in); + } + } + } + + .menu-title { + color: inherit; + display: inline-block; + font-size: $sidebar-menu-font-size; + line-height: 1; + vertical-align: middle; + margin-top: 2px; + } + + .badge { + margin-left: auto; + .rtl & { + margin-left: 0; + margin-right: auto; + } + } + &[aria-expanded="true"] { + i { + &.menu-arrow { + &:before { + @include rotate(90); + } + } + } + } + } + + &.active { + > .nav-link { + background: $sidebar-light-menu-active-bg; + position: relative; + i, + .menu-title, + .menu-arrow { + color: $sidebar-light-menu-active-color; + } + i { + &.menu-arrow { + &::before { + content: "\e64b"; + } + } + } + } + } + } + + &:not(.sub-menu) { + margin-top: 1.45rem; + margin-left: 0.375rem; + margin-right: 0.375rem; + > .nav-item { + margin-top: .2rem; + &:hover { + > .nav-link, &[aria-expanded="true"] { + background: $sidebar-light-menu-hover-bg; + color: $sidebar-light-menu-hover-color; + border-radius: 0.437rem; + } + } + > .nav-link { + margin: 0; + &[aria-expanded="true"] { + border-radius: 0.437rem 0.437rem 0 0; + background: $sidebar-light-menu-hover-bg; + } + } + &.active { + background: $sidebar-light-menu-hover-bg; + border-radius: 0.437rem; + } + } + } + &.sub-menu { + margin-bottom: 0; + margin-top:0; + list-style: none; + padding: $sidebar-submenu-padding; + background: $sidebar-light-menu-hover-bg; + padding-bottom: 12px; + + .nav-item { + padding: 0; + &::before { + content: ''; + width: 5px; + height: 5px; + position: absolute; + margin-top: 16px; + border-radius: 50%; + background: #b2b2b2; + } + .nav-link { + color: $sidebar-light-submenu-color; + padding: $sidebar-submenu-item-padding; + position: relative; + font-size: $sidebar-submenu-font-size; + line-height: 1; + height: auto; + border-top: 0; + &:hover { + color: $sidebar-light-submenu-hover-color; + } + &.active { + color: $sidebar-light-submenu-active-color; + background: transparent; + } + } + &:hover { + background: transparent; + } + } + } + } +} + +/* style for off-canvas menu*/ +@media screen and (max-width: 991px) { + .sidebar-offcanvas { + position: fixed; + max-height: calc(100vh - #{$navbar-height}); + top: $navbar-height; + bottom: 0; + overflow: auto; + right: -$sidebar-width-lg; + -webkit-transition: all 0.25s ease-out; + -o-transition: all 0.25s ease-out; + transition: all 0.25s ease-out; + &.active { + right: 0; + } + } +} \ No newline at end of file diff --git a/static/admin/scss/_typography.scss b/static/admin/scss/_typography.scss new file mode 100644 index 0000000..0e24c5b --- /dev/null +++ b/static/admin/scss/_typography.scss @@ -0,0 +1,128 @@ +/* Typography */ + +body { + font-size: 1rem; + font-family: $type; + font-weight: initial; + line-height: normal; + -webkit-font-smoothing: antialiased; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-weight: 500; + line-height: 1; +} +p { + font-size: $default-font-size; + margin-bottom: .5rem; + line-height: 1.3rem; +} +h1, +.h1 { + font-size: 3.125rem; +} +h2, +.h2 { + font-size: 2.5rem; +} +h3, +.h3 { + font-size: 1.875rem; +} +h4, +.h4 { + font-size: 1.125rem; +} +h5, +.h5 { + font-size: 1rem; +} +h6, +.h6 { + font-size: .9375rem; +} +.display-1 { + font-size: 3.75rem; + @media (max-width: 991px) { + font-size: 3rem; + } +} +.display-2 { + font-size: 3.125rem; + @media (max-width: 991px) { + font-size: 2.5rem; + } +} +.display-3 { + font-size: 2.5rem; + @media (max-width: 991px) { + font-size: 2rem; + } +} +.display-4 { + font-size: 1.875rem; + @media (max-width: 991px) { + font-size: 1.5rem; + } +} +.display-5 { + font-size: 1.25rem; + @media (max-width: 991px) { + font-size: 1rem; + } +} +.blockquote { + padding: 1.25rem; + border: 1px solid $border-color; +} + +address { + p { + margin-bottom: 0; + } +} + +//blockqoute color variations +@each $color, $value in $theme-colors { + .blockquote-#{$color} { + @include blockquote($value); + } +} +.error-page { + h1 { + font-size: 12rem; + @media (max-width: 991px) { + font-size: 8rem; + } + } +} + +// Social Color +@each $color, $value in $social-colors { + .text-#{$color} { + color: social-color($color); + } +} + +// Page header +.page-header { + margin-bottom: 2.5rem; + .page-title { + margin-bottom: 0; + line-height: .85; + } +} + +.font-weight-medium { + font-weight: 500; +} \ No newline at end of file diff --git a/static/admin/scss/_utilities.scss b/static/admin/scss/_utilities.scss new file mode 100644 index 0000000..dbac9d9 --- /dev/null +++ b/static/admin/scss/_utilities.scss @@ -0,0 +1,104 @@ +/* Utilities */ + +.grid-margin { + margin-bottom: $card-spacing-y; +} +.grid-margin-sm-0 { + @media (min-width: 576px) { + margin-bottom: 0; + } +} +.grid-margin-md-0 { + @media (min-width: 768px) { + margin-bottom: 0; + } +} +.grid-margin-lg-0 { + @media (min-width: 992px) { + margin-bottom: 0; + } +} +.grid-margin-xl-0 { + @media (min-width: 1200px) { + margin-bottom: 0; + } +} +.img-lg { + width: 92px; + height: 92px; +} +.img-sm { + width: 43px; + height: 43px; +} +.img-xs { + width: 37px; + height: 37px; +} +.img-ss { + width: 26px; + height: 26px; +} +.stretch-card { + @include display-flex; + @include align-items(stretch); + @include justify-content(stretch); + >.card{ + width: 100%; + min-width: 100%; + } +} + +.border-right-sm { + @media (min-width: 576px) { + border-right: $border-width solid $border-color; + } +} +.border-right-md { + @media (min-width: 768px) { + border-right: $border-width solid $border-color; + } +} +.border-right-lg { + @media (min-width: 992px) { + border-right: $border-width solid $border-color; + } +} + +.border-left-sm { + @media (min-width: 576px) { + border-left: $border-width solid $border-color; + } +} +.border-left-md { + @media (min-width: 768px) { + border-left: $border-width solid $border-color; + } +} +.border-left-lg { + @media (min-width: 992px) { + border-left: $border-width solid $border-color; + } +} + +.text-gray { + color: #8c8c8c; +} + +.text-black { + color: $black; +} + +.text-small { + font-size: 12px; +} + +.flex-grow { + flex-grow: 1; +} + +.hover-cursor { + &:hover { + cursor: pointer; + } +} \ No newline at end of file diff --git a/static/admin/scss/_variables.scss b/static/admin/scss/_variables.scss new file mode 100644 index 0000000..b760ba4 --- /dev/null +++ b/static/admin/scss/_variables.scss @@ -0,0 +1,310 @@ + +////////// COLOR SYSTEM ////////// + +$blue: #5E50F9; +$indigo: #6610f2; +$purple: #6a008a; +$pink: #E91E63; +$red: #f96868; +$orange: #f2a654; +$yellow: #f6e84e; +$green: #46c35f; +$teal: #58d8a3; +$cyan: #57c7d4; +$black: #000; +$white: #ffffff; +$white-smoke: #f2f7f8; +$violet: #41478a; +$darkslategray : #2e383e; +$dodger-blue : #3498db; + + +$colors: ( + blue: $blue, + indigo: $indigo, + purple: $purple, + pink: $pink, + red: $red, + orange: $orange, + yellow: $yellow, + green: $green, + teal: $teal, + cyan: $cyan, + white: $white, + gray: #434a54, + gray-light: #aab2bd, + gray-lighter: #e8eff4, + gray-lightest: #e6e9ed, + gray-dark: #0f1531, + black: #000000 +); + +$blue: $blue; +$indigo: $indigo; +$purple: $purple; +$pink: $pink; +$red: $red; +$orange: $orange; +$yellow: $yellow; +$green: $green; +$teal: $teal; +$cyan: $cyan; +$white: $white; +$gray: #434a54; +$gray-light: #aab2bd; +$gray-lighter: #e8eff4; +$gray-lightest: #e6e9ed; +$gray-dark: #0f1531; +$black: #000000; + +$theme-colors: ( + primary: #248afd, + secondary: #a3a4a5, + success: #71c016, + info: #68afff, + warning: #f5a623, + danger: #ff4747, + light: #f8f9fa, + dark: #282f3a +); + +$primary: #248afd; +$secondary: #a3a4a5; +$success: #71c016; +$info: #68afff; +$warning: #f5a623; +$danger: #ff4747; +$light: #f8f9fa; +$dark: #282f3a; + +$theme-gradient-colors: ( + primary: linear-gradient(230deg, #759bff, #843cf6), + secondary: linear-gradient(to right, #e7ebf0, #868e96), + success: linear-gradient(45deg, #7bffce, #30c93e), + info: linear-gradient(to bottom, #0e4cfd, #6a8eff), + warning: linear-gradient(135deg, #ffc480, #ff763b), + danger: linear-gradient(316deg, #fc5286, #fbaaa2), + light: linear-gradient(to right, #cfd9df 0%, #e2ebf0 100%), + dark: linear-gradient(to right, #7d7979 0%, #000000 100%) +); + +////////// COLOR SYSTEM ////////// + +////////// COLOR VARIABLES ////////// +$content-bg: #dddce1; +$border-color: #c9ccd7; + +////////// COLOR VARIABLES ////////// + + + +////////// SOCIAL COLORS ////////// + +$social-colors: ( + twitter: #2caae1, + facebook: #3b579d, + google: #dc4a38, + linkedin: #0177b5, + pinterest: #cc2127, + youtube: #e52d27, + github: #333333, + behance: #1769ff, + dribbble: #ea4c89, + reddit: #ff4500 +); + +////////// SOCIAL COLORS ////////// + +////////// FONTS// + +$type: 'Roboto', sans-serif; + +$default-font-size: .875rem; // 14px as base font size + +$text-muted: #686868; +$body-color: #000; + +////////// FONT VARIABLES ////////// + +///////// FOOTER //////// +$footer-height: 75px; +$footer-bg: $content-bg; +$footer-color: color(dark); +///////// FOOTER //////// + +///////// BUTTONS //////// + +$button-fixed-width: 150px; +$btn-padding-y: .875rem; +$btn-padding-x: 1.5rem; +$btn-line-height: 1; + +$btn-padding-y-xs: .5rem; +$btn-padding-x-xs: .75rem; + +$btn-padding-y-sm: .50rem; +$btn-padding-x-sm: .81rem; + +$btn-padding-y-lg: 1rem; +$btn-padding-x-lg: 3rem; + +$btn-font-size: .875rem; +$btn-font-size-xs: .625rem; +$btn-font-size-sm: .875rem; +$btn-font-size-lg: .875rem; + +$btn-border-radius: .1875rem; +$btn-border-radius-xs: .1875rem; +$btn-border-radius-sm: .1875rem; +$btn-border-radius-lg: .1875rem; + +///////// BUTTONS //////// + + + +///////// FORMS ///////// + +$input-bg: color(white); +$input-border-radius: 2px; +$input-placeholder-color: #c9c8c8; +$input-font-size: .875rem; + +$input-height : 2.875rem; +$input-height-sm : 2.25rem; +$input-height-lg : 3.5rem; + +$input-padding-y: .875rem; +$input-padding-x: 1.375rem; +$input-line-height: 1; + +$input-padding-y-xs: .5rem; +$input-padding-x-xs: .75rem; + +$input-padding-y-sm: .50rem; +$input-padding-x-sm: .81rem; + +$input-padding-y-lg: .94rem; +$input-padding-x-lg: 1.94rem; + +///////// FORMS ///////// + +//////// DROPDOWNS /////// + +$dropdown-border-color: $border-color; +$dropdown-divider-bg: $border-color; +$dropdown-link-color: $body-color; +$dropdown-header-color: $body-color; +$dropdown-link-hover-bg: #eaeaf1; +//////// DROPDOWNS /////// + +//////// TABLES //////// + +$table-accent-bg: transparent; +$table-hover-bg: #eaeaf1; +$table-cell-padding: 1.25rem .9375rem; +$table-border-color: $border-color; + +$table-inverse-bg: #2a2b32; +$table-inverse-color: color(white); + +//////// TABLES //////// + + + +////////// MEASUREMENT AND PROPERTY VARIABLES ////////// + +$border-property: 1px solid $border-color; +$card-spacing-y: 1.875rem; +$card-padding-y: 1.25rem; +$card-padding-x: 1.437rem; +$card-border-radius: 0; +$card-border-color: #e3e3e3; +$card-box-shadow: 4px 8px 9px -2px #c7c5d8; +$card-title-color: #787878; +$card-description-color: #76838f; +$grid-gutter-width: 30px; +$action-transition-duration: 0.25s; +$action-transition-timing-function: ease; +////////// OTHER VARIABLES ////////// + + + +///////// TABS VARIABLES ////////// +$nav-tabs-border-color: #ebedf2; +$nav-tabs-link-bg: #f6f8fa; +$nav-tabs-link-color: #000000; +$nav-tabs-link-hover-border-color: $nav-tabs-border-color $nav-tabs-border-color $nav-tabs-border-color; +$nav-tabs-link-active-color: $body-color; +$nav-tabs-link-active-bg: $white; +$nav-tabs-link-active-border-color: $nav-tabs-border-color $nav-tabs-border-color $nav-tabs-link-active-bg; +$nav-pills-custom-bg: #fcfcfd; +//////// TABS VARIABLES ///////// + + + +/////////////////////////////////////////////////////////////////////////////////////////////// + + + +////////// SIDEBAR //////// +$sidebar-width-lg: 237px; +$sidebar-width-mini: 185px; +$sidebar-width-icon: 70px; + +$sidebar-light-bg: $content-bg; +$sidebar-light-menu-color: #787878; +$sidebar-light-submenu-color: #656565; +$sidebar-light-menu-active-bg: initial; +$sidebar-light-menu-active-color: $primary; +$sidebar-light-menu-hover-bg: #e8e7ec; +$sidebar-light-menu-hover-color: #56595a; +$sidebar-light-submenu-hover-color: $black; +$sidebar-light-submenu-active-color: $black; +$sidebar-light-menu-icon-color: $sidebar-light-menu-color; +$sidebar-light-menu-arrow-color: #686868; +$sidebar-light-profile-name-color: #404852; +$sidebar-light-profile-title-color: #8d9498; + + +$sidebar-menu-font-size: .875rem; +$sidebar-menu-padding-left: 1rem; +$sidebar-menu-padding-right: 1.937rem; +$sidebar-menu-padding-top: .75rem; +$sidebar-menu-padding-bottom: .75rem; + +$sidebar-submenu-padding: .25rem 0 0 3.07rem; +$sidebar-submenu-font-size: .875rem; +$sidebar-submenu-item-padding: .7rem 1rem; + +$sidebar-icon-font-size: 1rem; +$sidebar-arrow-font-size: .625rem; + +$sidebar-profile-bg: transparent; +$sidebar-profile-padding: 0 1.625rem 2.25rem 1.188rem; + +$sidebar-mini-menu-padding: .8125rem 1rem .8125rem 1rem; + +$sidebar-icon-only-menu-padding: .5rem 1.625rem .5rem 1.188rem; +$sidebar-icon-only-submenu-padding: 0 0 0 1.5rem; + +$sidebar-box-shadow: 6px 16px 31px -18px #b7bcd1; + +$rtl-sidebar-submenu-padding: 0 4.5rem 0 0; + +$icon-only-collapse-width: 190px; +$icon-only-menu-bg-light: $sidebar-light-bg; + +///////// SIDEBAR //////// + + +///////// NAVBAR //////// + +$navbar-default-bg: $white; +$navbar-box-shadow: 0 5px 21px -5px #cdd1e1; +$navbar-height: 70px; +$navbar-menu-color: #9b9b9b; +$navbar-font-size: 1rem; +$navbar-icon-font-size: .9375rem; + +///////// NAVBAR //////// +$buy-nowbanner-padding-top:60px; \ No newline at end of file diff --git a/static/admin/scss/_vertical-wrapper.scss b/static/admin/scss/_vertical-wrapper.scss new file mode 100644 index 0000000..e2b7966 --- /dev/null +++ b/static/admin/scss/_vertical-wrapper.scss @@ -0,0 +1,36 @@ +.page-body-wrapper { + min-height: calc(100vh - #{$navbar-height}); + @include display-flex(); + @include flex-direction(row); + padding-left: 0; + padding-right: 0; + padding-top: $navbar-height; + + &.full-page-wrapper { + width: 100%; + min-height: 100vh; + padding-top: 0; + } +} + +.main-panel { + transition: width $action-transition-duration $action-transition-timing-function, margin $action-transition-duration $action-transition-timing-function; + width: calc(100% - #{$sidebar-width-lg}); + min-height: calc(100vh - #{$navbar-height}); + @include display-flex(); + @include flex-direction(column); + @media (max-width: 991px) { + margin-left: 0; + width: 100%; + } +} + +.content-wrapper { + background: $content-bg; + padding: 1.5rem 2.5rem; + width: 100%; + @include flex-grow(1); + @media(max-width: 767px) { + padding: 1.5rem 1.5rem; + } +} \ No newline at end of file diff --git a/static/admin/scss/components/.DS_Store b/static/admin/scss/components/.DS_Store new file mode 100644 index 0000000..df2371a Binary files /dev/null and b/static/admin/scss/components/.DS_Store differ diff --git a/static/admin/scss/components/_badges.scss b/static/admin/scss/components/_badges.scss new file mode 100644 index 0000000..2c92161 --- /dev/null +++ b/static/admin/scss/components/_badges.scss @@ -0,0 +1,19 @@ +/* Badges */ + +.badge { + border-radius: 0; + font-size: 12px; + line-height: 1; + padding: .375rem .5625rem; + font-weight: normal; + &.badge-pill { + border-radius: 10rem; + } +} + +/*Badge outlined variations*/ +@each $color, $value in $theme-colors { + .badge-outline-#{$color} { + @include badge-outline-variations($value); + } +} \ No newline at end of file diff --git a/static/admin/scss/components/_bootstrap-progress.scss b/static/admin/scss/components/_bootstrap-progress.scss new file mode 100644 index 0000000..a8f6785 --- /dev/null +++ b/static/admin/scss/components/_bootstrap-progress.scss @@ -0,0 +1,22 @@ +/* Bootstrap Progress */ + +.progress { + @include border-radius(0px); + height: 8px; + .progress-bar { + @include border-radius(0px); + } + + &.progress-sm{ + height: 0.375rem; + } + &.progress-md { + height: 11px; + } + &.progress-lg { + height: 15px; + } + &.progress-xl { + height: 18px; + } +} \ No newline at end of file diff --git a/static/admin/scss/components/_buttons.scss b/static/admin/scss/components/_buttons.scss new file mode 100644 index 0000000..2bf7106 --- /dev/null +++ b/static/admin/scss/components/_buttons.scss @@ -0,0 +1,81 @@ +/* Buttons */ + +.btn { + font-size: $btn-font-size; + line-height: 1; + font-weight: 400; + i { + font-size: 1rem; + } + &.btn-rounded { + @include border-radius(50px); + } + &.btn-sm { + font-size: $btn-font-size-sm; + padding: 1.25rem 1rem; + } + &.btn-lg { + font-size: $btn-font-size-lg; + padding: 1.375rem 3.4rem; + } + &.btn-xs { + padding: $btn-padding-y-xs $btn-padding-x-xs; + font-size: $btn-font-size-xs; + } + /* Buttons with only icons */ + &.btn-icon { + width: 42px; + height: 42px; + padding: 0; + } + /* Buttons with icon and text */ + &.btn-icon-text { + .btn-icon-prepend { + margin-right: .5rem; + } + .btn-icon-append { + margin-left: .5rem; + } + } + &.btn-social-icon { + width: 50px; + height: 50px; + padding: 0; + } +} + +.btn-group { + .btn { + + .btn { + border-left: 0; + } + } +} + +.btn-toolbar { + .btn-group { + +.btn-group { + @extend .ms-2; + } + } +} +/*social buttons*/ +@each $color, $value in $social-colors { + .btn-#{$color} { + @include social-button(social-color($color)); + } + .btn-outline-#{$color} { + @include social-outline-button(social-color($color)); + } +} +/* inverse buttons */ +@each $color, $value in $theme-colors { + .btn-inverse-#{$color} { + @include button-inverse-variant($value); + } +} + +.btn-outline-light { + color: #6c7383; + border-color: #e3e3e3; +} \ No newline at end of file diff --git a/static/admin/scss/components/_cards.scss b/static/admin/scss/components/_cards.scss new file mode 100644 index 0000000..a167cc1 --- /dev/null +++ b/static/admin/scss/components/_cards.scss @@ -0,0 +1,102 @@ +/* Cards */ + +.card { + box-shadow: $card-box-shadow; + -webkit-box-shadow: $card-box-shadow; + -moz-box-shadow: $card-box-shadow; + -ms-box-shadow: $card-box-shadow; + .card-body { + padding: $card-padding-y $card-padding-x; + + .card-body { + padding-top: 1rem; + } + } + .card-title { + color: $card-title-color; + margin-bottom: 1.2rem; + text-transform: uppercase; + font-size: 0.875rem; + font-weight: 500; + } + .card-subtitle { + @extend .text-gray; + font-weight: 400; + margin-top: 0.625rem; + margin-bottom: 0.625rem; + + } + .card-description { + margin-bottom: .875rem; + font-weight: 400; + color: $card-description-color; + } + &.card-outline-success { + border: 1px solid theme-color("success"); + } + &.card-outline-primary { + border: 1px solid theme-color("primary"); + } + &.card-outline-warning { + border: 1px solid theme-color("warning"); + } + &.card-outline-danger { + border: 1px solid theme-color("danger"); + } + &.card-rounded { + @include border-radius(5px); + } + + &.card-faded { + background: #b5b0b2; + border-color: #b5b0b2; + } + &.card-circle-progress { + color: $white; + text-align: center; + } + &.card-img-holder { + position: relative; + .card-img-absolute { + position: absolute; + top:0; + right: 0; + height: 100%; + } + } + &.card-weather { + .weather-daily { + .weather-day { + opacity: .5; + font-weight: 900; + } + i { + font-size: 20px; + } + .weather-temp { + margin-top: .5rem; + margin-bottom: 0; + opacity: .5; + font-size: .75rem; + } + } + } +} + +@media (min-width: 576px) { + .card-columns { + column-count: 3; + column-gap: 1.25rem; + orphans: 1; + widows: 1; + .card { + display: inline-block; + width: 100%; + margin-bottom: 0.75rem; + } + } +} +@each $color, $value in $theme-colors { + .card-inverse-#{$color} { + @include card-inverse-variant(rgba($value, .2), theme-color-level($value, 1), theme-color-level($value, 3)); + } +} diff --git a/static/admin/scss/components/_checkbox-radio.scss b/static/admin/scss/components/_checkbox-radio.scss new file mode 100644 index 0000000..9eb2557 --- /dev/null +++ b/static/admin/scss/components/_checkbox-radio.scss @@ -0,0 +1,235 @@ +/* Checkboxes and Radios */ + +.form-check { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; + padding-left: 0; + + .form-check-label { + min-height: 18px; + display: block; + margin-left: 1.75rem; + font-size: $default-font-size; + line-height: 1.5; + .rtl & { + margin-left: 0; + margin-right: 1.75rem; + } + + input { + position: absolute; + top: 0; + left: 0; + .rtl & { + left: auto; + right: 0; + } + margin-left: 0; + margin-top: 0; + z-index: 1; + cursor: pointer; + opacity: 0; + filter: alpha(opacity=0); + } + input[type="checkbox"] { + + .input-helper { + &:before, + &:after { + position: absolute; + top: 0; + left: 0; + .rtl & { + left: auto; + right: 0; + } + } + &:before { + content: ""; + width: 18px; + height: 18px; + border-radius: 2px; + border: solid $primary; + border-width: 2px; + @include transition(all); + transition-duration: 0s; + -webkit-transition-duration: 250ms; + transition-duration: 250ms; + } + + &:after { + @include transition(all); + transition-duration: 0s; + -webkit-transition-duration: 250ms; + transition-duration: 250ms; + font-family: themify; + opacity: 0; + filter: alpha(opacity=0); + -webkit-transform: scale(0); + -ms-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); + content: '\e64c'; + font-size: .9375rem; + font-weight: bold; + color: $white; + } + } + &:checked { + +.input-helper { + &:before { + background: $primary; + border-width: 0; + } + &:after { + width: 18px; + opacity: 1; + line-height: 18px; + filter: alpha(opacity=100); + -webkit-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } + } + } + + &:disabled { + + .input-helper { + &:before { + border-color: $border-color; + } + } + + &:checked { + + .input-helper { + &:after { + background: $border-color; + color: $white; + } + } + } + } + } + input[type="radio"] { + +.input-helper { + &:before { + position: absolute; + content: ""; + top: 0; + left: 0; + .rtl & { + left: auto; + right: 0; + } + border: solid $primary; + border-width: 2px; + width: 20px; + height: 20px; + border-radius: 50%; + @include transition(all); + transition-duration: 0s; + -webkit-transition-duration: 250ms; + transition-duration: 250ms; + } + + &:after { + content: ""; + width: 8px; + height: 8px; + background: $white; + border-radius: 50%; + top: 6px; + left: 6px; + .rtl & { + left: auto; + right: 6px; + } + -webkit-transition: all; + -o-transition: all; + transition: all; + transition-duration: 0s; + -webkit-transition-duration: 250ms; + transition-duration: 250ms; + opacity: 0; + filter: alpha(opacity=0); + -webkit-transform: scale(0); + -ms-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); + position: absolute; + } + } + + &:checked { + +.input-helper { + &:before { + background: $primary; + border-width: 0; + } + + &:after { + opacity: 1; + line-height: 1.5; + filter: alpha(opacity=100); + -webkit-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } + } + } + + &:disabled { + + .input-helper { + &:before { + border-color: $border-color; + } + } + + &:checked { + + .input-helper { + &:before { + background: $border-color; + } + + &:after { + background: $white; + } + } + } + } + } + } +} + +@each $color, $value in $theme-colors { + .form-check-#{$color} { + &.form-check { + label { + input[type="checkbox"], + input[type="radio"] { + +.input-helper { + &:before { + border-color: theme-color($color); + } + } + &:checked { + +.input-helper { + &:before { + background: $value; + } + } + } + } + } + } + } +} + +@media (min-width: 576px) { + .form-inline .form-check { + + } +} \ No newline at end of file diff --git a/static/admin/scss/components/_dropdown.scss b/static/admin/scss/components/_dropdown.scss new file mode 100644 index 0000000..50e3a7a --- /dev/null +++ b/static/admin/scss/components/_dropdown.scss @@ -0,0 +1,33 @@ +/* Dropdowns */ + +.dropdown { + .dropdown-toggle { + &:after { + border-top: 0; + border-right: 0; + border-left: 0; + border-bottom: 0; + font: normal normal normal 24px/1 "themify"; + content: "\e64b"; + width: auto; + height: auto; + vertical-align: middle; + line-height: .625rem; + font-size: .875rem; + margin-left: .3rem; + } + } + .dropdown-menu { + margin-top: 0; + font-size: $default-font-size; + box-shadow: 0px 1px 15px 1px rgba(230, 234, 236, 0.35); + border-radius: 0; + .dropdown-item { + font-size: .875rem; + padding: .25rem 1.5rem; + &:active { + background: initial; + } + } + } +} diff --git a/static/admin/scss/components/_forms.scss b/static/admin/scss/components/_forms.scss new file mode 100644 index 0000000..4312920 --- /dev/null +++ b/static/admin/scss/components/_forms.scss @@ -0,0 +1,62 @@ +/* Forms */ + +.form-group { + margin-bottom: 1.5rem; +} +.input-group-append, +.input-group-prepend { + color: $input-placeholder-color; + width: auto; + border: none; + + .input-group-text { + border-color: $border-color; + padding: 1.25rem .75rem; + color: $input-placeholder-color; + } +} +.form-control { + border: 1px solid $border-color; + font-weight: 400; + font-size: $input-font-size; +} + +select { + &.form-control { + padding: .4375rem .75rem; + border: 0; + outline: 1px solid $border-color; + color: $input-placeholder-color; + &:focus { + outline: 1px solid $border-color; + } + @each $color, $value in $theme-colors { + &.border-#{$color} { + outline: 1px solid $value; + &:focus { + outline: 1px solid $value; + } + } + } + } +} +.form-group { + label { + font-size: $default-font-size; + line-height: 1.4rem; + vertical-align: top; + margin-bottom: .5rem; + } + &.has-danger { + .form-control { + border-color: $danger; + } + } + .file-upload-default { + visibility: hidden; + position: absolute; + } + .file-upload-info { + background: transparent; + } +} diff --git a/static/admin/scss/components/_icons.scss b/static/admin/scss/components/_icons.scss new file mode 100644 index 0000000..59f1f16 --- /dev/null +++ b/static/admin/scss/components/_icons.scss @@ -0,0 +1,46 @@ +/* Icons */ + +.icons-list { + border-left: 1px solid $border-color; + border-top: 1px solid $border-color; + >div { + background: $white; + border-bottom: 1px solid $border-color; + border-right: 1px solid $border-color; + @include display-flex; + @include align-items(center); + padding:15px 15px; + font-weight: 400; + font-size: $default-font-size; + + i { + display: inline-block; + font-size: 20px; + width: 40px; + text-align: left; + color: $primary; + } + } +} + +.icon-in-bg { + width: 55px; + height: 55px; + text-align: center; + @include display-flex(); + @include align-items(center); + @include justify-content(center); +} + +.icon-lg { + font-size: 2.875rem; +} + + +.icon-md { + font-size: 2rem; +} + +.icon-sm { + font-size: 1rem; +} diff --git a/static/admin/scss/components/_lists.scss b/static/admin/scss/components/_lists.scss new file mode 100644 index 0000000..0f56dd2 --- /dev/null +++ b/static/admin/scss/components/_lists.scss @@ -0,0 +1,55 @@ +/* Lists */ + +ul, +ol, +dl { + padding-left: 1rem; + font-size: $default-font-size; + li { + line-height: 1.8; + } +} + +.list-ticked, +.list-arrow, +.list-star { + list-style: none; + padding: 0; + li { + padding-left: 1.5rem; + &:before { + font-family: "themify"; + margin-left: -1.5rem; + width: 1.5rem; + margin-right: .5rem; + font-size: .6rem; + } + } +} + +.list-ticked { + li { + &:before { + content: '\e64c'; + color: $danger; + } + } +} + +.list-arrow { + li { + &:before { + content: '\e649'; + color: $success; + } + } +} + +.list-star { + li { + &:before { + content: '\e60a'; + color: $warning; + } + } +} \ No newline at end of file diff --git a/static/admin/scss/components/_tables.scss b/static/admin/scss/components/_tables.scss new file mode 100644 index 0000000..82a664d --- /dev/null +++ b/static/admin/scss/components/_tables.scss @@ -0,0 +1,59 @@ +/* Tables */ + +.table { + margin-bottom: 0; + thead { + th { + border-top: 0; + border-bottom-width: 1px; + font-weight: bold; + font-size: .875rem; + i { + margin-left: 0.325rem; + } + } + } + th, + td { + vertical-align: middle; + line-height: 1; + white-space: nowrap; + padding: $table-cell-padding; + } + td { + font-size: $default-font-size; + img { + width: 36px; + height: 36px; + border-radius: 100%; + } + .badge { + margin-bottom: 0; + } + } + &.table-borderless { + border: none; + tr, + td, + th { + border: none; + } + } + &.table-bordered { + border-top: 1px solid $border-color; + } + &.table-hover { + thead, + tbody { + tr { + cursor: pointer; + } + } + } +} +.table > :not(:last-child) > :last-child > *, .jsgrid .jsgrid-table > :not(:last-child) > :last-child > * { + border-bottom-color: $border-color; +} +.table > :not(:first-child), .jsgrid .jsgrid-table > :not(:first-child) { + border-top: none; +} \ No newline at end of file diff --git a/static/admin/scss/components/_todo-list.scss b/static/admin/scss/components/_todo-list.scss new file mode 100644 index 0000000..332206b --- /dev/null +++ b/static/admin/scss/components/_todo-list.scss @@ -0,0 +1,86 @@ +/* Tabs */ + +.add-items { + margin-bottom: 1.5rem; + overflow: hidden; + input[type="text"] { + width: 100%; + background: transparent; + @include placeholder { + font-size: 1rem; + color: #9b9b9b; + } + } + .btn { + margin-left: .5rem; + i { + font-size: 2.25rem; + } + .rtl & { + margin-left: auto; + margin-right: .5rem; + } + } +} + +.list-wrapper { + height: 100%; + max-height: 361px; + overflow: scroll; + ul { + padding: 0; + text-align: left; + list-style: none; + margin-bottom: 0; + li { + @extend .d-flex; + @extend .align-items-center; + @extend .justify-content-start; + font-size: .9375rem; + padding: 1.063rem 0rem; + border-bottom: 1px solid $border-color; + .form-check{ + @extend %ellipsor; + max-width: 90%; + margin-top: .25rem; + margin-bottom: .25rem; + .form-check-label{ + @extend%ellipsor; + } + } + } + } + + input[type="checkbox"] { + margin-right: 15px; + } + + .remove { + @extend .ms-auto; + @extend .text-secondary; + .rtl & { + @extend .ms-0; + @extend .me-auto; + } + cursor: pointer; + font-size: 1.1rem; + font-weight: 600; + width: 1.25rem; + height: 1.25rem; + line-height: 1.25rem; + text-align: center; + &:hover { + @extend .text-danger; + } + } + + .completed { + .form-check { + text-decoration: line-through; + text-decoration-color: $black; + } + .remove { + @extend .text-primary; + } + } +} diff --git a/static/admin/scss/landing-screens/_auth.scss b/static/admin/scss/landing-screens/_auth.scss new file mode 100644 index 0000000..76a10f1 --- /dev/null +++ b/static/admin/scss/landing-screens/_auth.scss @@ -0,0 +1,87 @@ +/* Auth */ + +.auth { + .login-half-bg { + background: url("../images/auth/login-bg.jpg"); + background-size: cover; + } + .register-half-bg { + background: url("../images/auth/register-bg.jpg"); + background-size: cover; + } + &.lock-full-bg { + background: url("../images/auth/lockscreen-bg.jpg"); + background-size: cover; + } + .lock-profile-img { + width: 90px; + height: 90px; + border-radius: 100%; + } + .auth-form-light { + background: $white; + select { + color: $input-placeholder-color; + } + .input-group { + .form-control { + &:focus, + &:active { + border-color: $border-color; + } + } + } + } + .auth-form-transparent { + background: transparent; + .form-control, + .input-group-text { + border-color: $secondary; + &:focus, + &:active { + border-color: $secondary; + } + } + select { + outline-color: $secondary; + } + } + &.auth-img-bg { + padding: 0; + .auth-form-transparent { + @media (min-width:768px) { + width: 55%; + margin: auto; + } + } + } + .brand-logo { + margin-bottom: 2rem; + img { + width: 150px; + } + } + form { + .form-group { + margin-bottom: 1.5rem; + label { + font-size: .8125rem; + } + .form-control { + background: transparent; + border-radius: 0; + font-size: .9375rem; + } + } + .auth-form-btn { + padding: 1rem 3rem; + line-height: 1.5; + } + .auth-link { + font-size: $default-font-size; + &:hover { + color: initial; + } + } + } +} \ No newline at end of file diff --git a/static/admin/scss/mixins/.DS_Store b/static/admin/scss/mixins/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/static/admin/scss/mixins/.DS_Store differ diff --git a/static/admin/scss/mixins/_animation.scss b/static/admin/scss/mixins/_animation.scss new file mode 100644 index 0000000..9fffeec --- /dev/null +++ b/static/admin/scss/mixins/_animation.scss @@ -0,0 +1,70 @@ +/* Animation Mixins */ +@keyframes dropdownAnimation { + from { + opacity: 0; + transform: translate3d(0, -30px, 0); + } + + to { + opacity: 1; + transform: none; + transform: translate3d(0, 0px, 0); + } +} + +.dropdownAnimation { + animation-name: dropdownAnimation; + @include animation-duration($action-transition-duration); + @include animation-fill-mode(both); +} +@mixin transition($settings) { + -webkit-transition: $settings; + -moz-transition: $settings; + -ms-transition: $settings; + -o-transition: $settings; + transition: $settings; +} +@keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +.fadeOut { + animation-name: fadeOut; +} + +.infinite-spin { + @keyframes spin { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } + } + animation-name: spin; + animation-duration: 3s; + animation-iteration-count: infinite; + animation-timing-function: linear; +} +@keyframes fadeInUp { + from { + opacity: 0; + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInUp { + animation-name: fadeInUp; +} \ No newline at end of file diff --git a/static/admin/scss/mixins/_badges.scss b/static/admin/scss/mixins/_badges.scss new file mode 100644 index 0000000..99dea32 --- /dev/null +++ b/static/admin/scss/mixins/_badges.scss @@ -0,0 +1,7 @@ +//Badge Mixins + +// Badge outlined variations +@mixin badge-outline-variations($color) { + color: $color; + border: 1px solid $color; +} \ No newline at end of file diff --git a/static/admin/scss/mixins/_blockqoute.scss b/static/admin/scss/mixins/_blockqoute.scss new file mode 100644 index 0000000..c0ce3cd --- /dev/null +++ b/static/admin/scss/mixins/_blockqoute.scss @@ -0,0 +1,8 @@ +// BlockQuote Mixins // + +@mixin blockquote($color) { + border-color: $color; + .blockquote-footer { + color: $color; + } +} diff --git a/static/admin/scss/mixins/_buttons.scss b/static/admin/scss/mixins/_buttons.scss new file mode 100644 index 0000000..af51001 --- /dev/null +++ b/static/admin/scss/mixins/_buttons.scss @@ -0,0 +1,60 @@ +@mixin social-button($color) { + background: $color; + color: $white; + + &:hover, + &:focus { + background: darken($color, 10%); + color: $white; + } + &.btn-social-icon-text { + padding: 0 1.5rem 0 0; + background: lighten($color, 10%); + i { + background: $color; + padding: .75rem; + display: inline-block; + margin-right: 1.5rem; + } + } +} +@mixin social-outline-button($color) { + border: 1px solid $color; + color: $color; + &:hover { + background: $color; + color: $white; + } +} +@mixin button-inverse-variant($color, $color-hover: $white) { + background-color: rgba($color, 0.2); + background-image: none; + border-color: rgba($color, 0); + &:not(.btn-inverse-light) { + color: $color; + } + &:hover { + color: $color-hover; + background-color: $color; + border-color: $color; + } + + &.focus, + &:focus { + box-shadow: 0 0 0 3px rgba($color, .5); + } + + &.disabled, + &:disabled { + color: $color; + background-color: transparent; + } + + &.active, + &:active, + .show > &.dropdown-toggle { + color: $color-hover; + background-color: $color; + border-color: $color; + } +} diff --git a/static/admin/scss/mixins/_cards.scss b/static/admin/scss/mixins/_cards.scss new file mode 100644 index 0000000..2a03679 --- /dev/null +++ b/static/admin/scss/mixins/_cards.scss @@ -0,0 +1,7 @@ +// Cards Mixins + +@mixin card-inverse-variant($bg, $border, $color) { + background: $bg; + border: 1px solid $border; + color: $color; +} diff --git a/static/admin/scss/mixins/_misc.scss b/static/admin/scss/mixins/_misc.scss new file mode 100644 index 0000000..2b90e40 --- /dev/null +++ b/static/admin/scss/mixins/_misc.scss @@ -0,0 +1,72 @@ +/* Miscellaneous Mixins */ + +// general transform +@mixin transform($transforms) { + -moz-transform: $transforms; + -o-transform: $transforms; + -ms-transform: $transforms; + -webkit-transform: $transforms; + transform: $transforms; +} + +// rotate +@mixin rotate ($deg) { + @include transform(rotate(#{$deg}deg)); +} + +// scale +@mixin scale($scale) { + @include transform(scale($scale)); +} +// translate +@mixin translate ($x, $y) { + @include transform(translate($x, $y)); +} +// skew +@mixin skew ($x, $y) { + @include transform(skew(#{$x}deg, #{$y}deg)); +} +//transform origin +@mixin transform-origin ($origin) { + moz-transform-origin: $origin; + -o-transform-origin: $origin; + -ms-transform-origin: $origin; + -webkit-transform-origin: $origin; + transform-origin: $origin; +} +//Ellipsis +%ellipsor{ + text-overflow: ellipsis; + overflow: hidden; + max-width:100%; + white-space: nowrap; +} + +// Placeholder +@mixin placeholder { + &::-webkit-input-placeholder { + @content + } + &:-moz-placeholder { + @content + } + &::-moz-placeholder { + @content + } + &:-ms-input-placeholder { + @content + } +} + +%ellipsor { + text-overflow: ellipsis; + overflow: hidden; + max-width: 100%; + white-space: nowrap; +} +@mixin ellipsor { + text-overflow: ellipsis; + overflow: hidden; + max-width: 100%; + white-space: nowrap; +} \ No newline at end of file diff --git a/static/admin/scss/style.scss b/static/admin/scss/style.scss new file mode 100644 index 0000000..3baafd0 --- /dev/null +++ b/static/admin/scss/style.scss @@ -0,0 +1,121 @@ +/*------------------------------------------------------------------ + [Master Stylesheet] + + Project: RoyalUI Admin + Version: 1.0.0 +-------------------------------------------------------------------*/ + + + +/*------------------------------------------------------------------- + ===== Table of Contents ===== + + * Bootstrap functions + * Bootstrap variables + * Template variables + * SCSS Compass Functions + * Boostrap Main SCSS + * Template mixins + + Animation Mixins + + Button Mixins + + Miscellaneous Mixins + + Cards Mixins + + Color Functions Mixins + + Badge Mixins + + Blockquote Mixins + + * Core Styles + + Reset Styles + + Fonts + + Functions + + Backgrounds + + Typography + + Miscellaneous + + Footer + + Utilities + + Demo styles + * Components + + Buttons + + Badges + + Bootstrap Progress + + Cards + + Checkboxes and Radios + + Dropdowns + + Forms + + Icons + + Lists + + Tables + + To-do List + * Landing screens + + Auth + * Layout + + Vertical wrapper + + Sidebar + + Navbar + + Layouts + +-------------------------------------------------------------------*/ + + +/*-------------------------------------------------------------------*/ +/* === Import Bootstrap functions and variables === */ +@import "../node_modules/bootstrap/scss/functions"; +@import "../node_modules/bootstrap/scss/variables"; + +/*-------------------------------------------------------------------*/ +/* === Import template variables === */ +@import "variables"; + +/*-------------------------------------------------------------------*/ +/* === SCSS Compass Functions === */ +@import "../node_modules/compass-mixins/lib/compass"; +@import "../node_modules/compass-mixins/lib/animate"; + +/*-------------------------------------------------------------------*/ +/* === Boostrap Main SCSS === */ +@import "../node_modules/bootstrap/scss/bootstrap"; + +/*-------------------------------------------------------------------*/ +/* === Template mixins === */ +@import "mixins/misc"; +@import "mixins/badges"; +@import "mixins/animation"; +@import "mixins/blockqoute"; +@import "mixins/buttons"; +@import "mixins/cards"; + +/*-------------------------------------------------------------------*/ +/* === Core Styles === */ +@import "reset"; +@import "fonts"; +@import "functions"; +@import "background"; +@import "typography"; +@import "misc"; +@import "footer"; +@import "utilities"; +@import "demo"; + +/*-------------------------------------------------------------------*/ +/* === Components === */ +@import "components/buttons"; +@import "components/badges"; +@import "components/bootstrap-progress"; +@import "components/cards"; +@import "components/checkbox-radio"; +@import "components/dropdown"; +@import "components/forms"; +@import "components/icons"; +@import "components/lists"; +@import "components/tables"; +@import "components/todo-list"; + +/*-------------------------------------------------------------------*/ +/* === Landing screens === */ +@import "landing-screens/auth"; + + +@import "vertical-wrapper"; +@import "sidebar"; +@import "navbar"; +@import "layouts"; \ No newline at end of file diff --git a/static/admin/vendors/.DS_Store b/static/admin/vendors/.DS_Store new file mode 100644 index 0000000..6a44a40 Binary files /dev/null and b/static/admin/vendors/.DS_Store differ diff --git a/static/admin/vendors/base/bootstrap.min.js.map b/static/admin/vendors/base/bootstrap.min.js.map new file mode 100644 index 0000000..1bcefd0 --- /dev/null +++ b/static/admin/vendors/base/bootstrap.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../js/src/util.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/carousel.js","../../js/src/collapse.js","../../js/src/dropdown.js","../../js/src/modal.js","../../js/src/tools/sanitizer.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/src/index.js"],"names":["TRANSITION_END","transitionEndEmulator","duration","_this","this","called","$","one","Util","setTimeout","triggerTransitionEnd","getUID","prefix","Math","random","document","getElementById","getSelectorFromElement","element","selector","getAttribute","hrefAttr","trim","querySelector","err","getTransitionDurationFromElement","transitionDuration","css","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","split","reflow","offsetHeight","trigger","supportsTransitionEnd","Boolean","isElement","obj","nodeType","typeCheckConfig","componentName","config","configTypes","property","Object","prototype","hasOwnProperty","call","expectedTypes","value","valueType","toString","match","toLowerCase","RegExp","test","Error","toUpperCase","findShadowRoot","documentElement","attachShadow","getRootNode","ShadowRoot","parentNode","root","fn","emulateTransitionEnd","event","special","bindType","delegateType","handle","target","is","handleObj","handler","apply","arguments","NAME","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","Event","CLOSE","CLOSED","CLICK_DATA_API","ClassName","Alert","_element","close","rootElement","_getRootElement","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","parent","closest","closeEvent","removeClass","hasClass","_destroyElement","detach","remove","_jQueryInterface","each","$element","data","_handleDismiss","alertInstance","preventDefault","on","Constructor","noConflict","DATA_API_KEY","Selector","FOCUS_BLUR_DATA_API","Button","toggle","triggerChangeEvent","addAriaPressed","input","type","checked","classList","contains","activeElement","hasAttribute","focus","setAttribute","toggleClass","button","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","Direction","SLIDE","SLID","KEYDOWN","MOUSEENTER","MOUSELEAVE","TOUCHSTART","TOUCHMOVE","TOUCHEND","POINTERDOWN","POINTERUP","DRAG_START","LOAD_DATA_API","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","window","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","cycle","clearInterval","setInterval","visibilityState","bind","to","index","activeIndex","_getItemIndex","length","direction","off","_objectSpread","_handleSwipe","absDeltax","abs","_this2","_keydown","_addTouchEventListeners","_this3","start","originalEvent","pointerType","clientX","touches","end","clearTimeout","querySelectorAll","e","add","tagName","which","slice","indexOf","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","children","addClass","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","nextElementInterval","parseInt","defaultInterval","action","TypeError","ride","_dataApiClickHandler","slideIndex","carousels","i","len","$carousel","SHOW","SHOWN","HIDE","HIDDEN","Dimension","Collapse","_isTransitioning","_triggerArray","id","toggleList","elem","filterElement","filter","foundElem","_selector","push","_parent","_getParent","_addAriaAndCollapsedClass","hide","show","actives","activesData","not","startEvent","dimension","_getDimension","style","attr","setTransitioning","scrollSize","getBoundingClientRect","triggerArrayLength","isTransitioning","jquery","_getTargetFromElement","triggerArray","isOpen","$this","currentTarget","$trigger","selectors","$target","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","CLICK","KEYDOWN_DATA_API","KEYUP_DATA_API","AttachmentMap","offset","flip","boundary","reference","display","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","disabled","_getParentFromElement","isActive","_clearMenus","showEvent","Popper","referenceElement","_getPopperConfig","body","noop","hideEvent","destroy","update","scheduleUpdate","stopPropagation","constructor","_getPlacement","$parentDropdown","placement","_getOffset","offsets","popperConfig","modifiers","enabled","preventOverflow","boundariesElement","applyStyle","toggles","context","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","backdrop","FOCUSIN","RESIZE","CLICK_DISMISS","KEYDOWN_DISMISS","MOUSEUP_DISMISS","MOUSEDOWN_DISMISS","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","forEach","htmlElement","handleUpdate","Node","ELEMENT_NODE","appendChild","removeAttribute","scrollTop","_enforceFocus","shownEvent","transitionComplete","has","_this5","_this6","_this7","_resetAdjustments","_resetScrollbar","_removeBackdrop","callback","_this8","animate","createElement","className","appendTo","backdropTransitionDuration","callbackRemove","isModalOverflowing","scrollHeight","clientHeight","paddingLeft","paddingRight","rect","left","right","innerWidth","_getScrollbarWidth","_this9","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","marginRight","calculatedMargin","padding","elements","margin","scrollDiv","scrollbarWidth","width","clientWidth","removeChild","_this10","uriAttrs","DefaultWhitelist","*","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","DOMParser","parseFromString","whitelistKeys","keys","_loop","el","elName","nodeName","attributeList","attributes","whitelistedAttributes","concat","allowedAttributeList","attrName","nodeValue","regExp","attrRegex","l","allowedAttribute","innerHTML","CLASS_PREFIX","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","animation","template","title","delay","html","container","fallbackPlacement","sanitize","AUTO","TOP","RIGHT","BOTTOM","LEFT","HoverState","INSERTED","FOCUSOUT","Trigger","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","dataKey","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","isWithContent","shadowRoot","isInTheDom","ownerDocument","tipId","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","behavior","arrow","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","complete","_fixTransition","prevHoverState","_cleanTipClass","getTitle","setElementContent","content","text","empty","append","find","eventIn","eventOut","_fixTitle","titleType","dataAttributes","dataAttr","key","$tip","tabClass","join","popperData","popperInstance","instance","popper","initConfigAnimation","Popover","_getContent","method","ACTIVATE","SCROLL","OffsetMethod","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","map","targetSelector","targetBCR","height","top","item","sort","pageYOffset","max","_getOffsetHeight","innerHeight","maxScroll","_activate","_clear","queries","$link","parents","node","scrollSpys","$spy","Tab","previous","listElement","itemSelector","makeArray","hiddenEvent","active","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","autohide","Toast","withoutTimeout","_close","version"],"mappings":"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","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n return undefined // eslint-disable-line no-undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (err) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n // TODO: Remove in v5\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value)\n ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n }\n}\n\nsetTransitionEndSupport()\n\nexport default Util\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Selector = {\n DISMISS : '[data-dismiss=\"alert\"]'\n}\n\nconst Event = {\n CLOSE : `close${EVENT_KEY}`,\n CLOSED : `closed${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n ALERT : 'alert',\n FADE : 'fade',\n SHOW : 'show'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${ClassName.ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(Event.CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(ClassName.SHOW)\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(Event.CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n Event.CLICK_DATA_API,\n Selector.DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst ClassName = {\n ACTIVE : 'active',\n BUTTON : 'btn',\n FOCUS : 'focus'\n}\n\nconst Selector = {\n DATA_TOGGLE_CARROT : '[data-toggle^=\"button\"]',\n DATA_TOGGLE : '[data-toggle=\"buttons\"]',\n INPUT : 'input:not([type=\"hidden\"])',\n ACTIVE : '.active',\n BUTTON : '.btn'\n}\n\nconst Event = {\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n FOCUS_BLUR_DATA_API : `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(\n Selector.DATA_TOGGLE\n )[0]\n\n if (rootElement) {\n const input = this._element.querySelector(Selector.INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked &&\n this._element.classList.contains(ClassName.ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(Selector.ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName.ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') ||\n rootElement.hasAttribute('disabled') ||\n input.classList.contains('disabled') ||\n rootElement.classList.contains('disabled')) {\n return\n }\n input.checked = !this._element.classList.contains(ClassName.ACTIVE)\n $(input).trigger('change')\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed',\n !this._element.classList.contains(ClassName.ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName.ACTIVE)\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $(this).data(DATA_KEY, data)\n }\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n event.preventDefault()\n\n let button = event.target\n\n if (!$(button).hasClass(ClassName.BUTTON)) {\n button = $(button).closest(Selector.BUTTON)\n }\n\n Button._jQueryInterface.call($(button), 'toggle')\n })\n .on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n const button = $(event.target).closest(Selector.BUTTON)[0]\n $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true,\n touch : true\n}\n\nconst DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean',\n touch : 'boolean'\n}\n\nconst Direction = {\n NEXT : 'next',\n PREV : 'prev',\n LEFT : 'left',\n RIGHT : 'right'\n}\n\nconst Event = {\n SLIDE : `slide${EVENT_KEY}`,\n SLID : `slid${EVENT_KEY}`,\n KEYDOWN : `keydown${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`,\n TOUCHSTART : `touchstart${EVENT_KEY}`,\n TOUCHMOVE : `touchmove${EVENT_KEY}`,\n TOUCHEND : `touchend${EVENT_KEY}`,\n POINTERDOWN : `pointerdown${EVENT_KEY}`,\n POINTERUP : `pointerup${EVENT_KEY}`,\n DRAG_START : `dragstart${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n CAROUSEL : 'carousel',\n ACTIVE : 'active',\n SLIDE : 'slide',\n RIGHT : 'carousel-item-right',\n LEFT : 'carousel-item-left',\n NEXT : 'carousel-item-next',\n PREV : 'carousel-item-prev',\n ITEM : 'carousel-item',\n POINTER_EVENT : 'pointer-event'\n}\n\nconst Selector = {\n ACTIVE : '.active',\n ACTIVE_ITEM : '.active.carousel-item',\n ITEM : '.carousel-item',\n ITEM_IMG : '.carousel-item img',\n NEXT_PREV : '.carousel-item-next, .carousel-item-prev',\n INDICATORS : '.carousel-indicators',\n DATA_SLIDE : '[data-slide], [data-slide-to]',\n DATA_RIDE : '[data-ride=\"carousel\"]'\n}\n\nconst PointerType = {\n TOUCH : 'touch',\n PEN : 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(Selector.INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT)\n }\n }\n\n nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(Selector.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex\n ? Direction.NEXT\n : Direction.PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element)\n .on(Event.KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(Event.MOUSEENTER, (event) => this.pause(event))\n .on(Event.MOUSELEAVE, (event) => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = (event) => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(Selector.ITEM_IMG)).on(Event.DRAG_START, (e) => e.preventDefault())\n if (this._pointerEvent) {\n $(this._element).on(Event.POINTERDOWN, (event) => start(event))\n $(this._element).on(Event.POINTERUP, (event) => end(event))\n\n this._element.classList.add(ClassName.POINTER_EVENT)\n } else {\n $(this._element).on(Event.TOUCHSTART, (event) => start(event))\n $(this._element).on(Event.TOUCHMOVE, (event) => move(event))\n $(this._element).on(Event.TOUCHEND, (event) => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode\n ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM))\n : []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === Direction.NEXT\n const isPrevDirection = direction === Direction.PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === Direction.PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1\n ? this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM))\n const slideEvent = $.Event(Event.SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE))\n $(indicators)\n .removeClass(ClassName.ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT\n orderClassName = ClassName.NEXT\n eventDirectionName = Direction.LEFT\n } else {\n directionalClassName = ClassName.RIGHT\n orderClassName = ClassName.PREV\n eventDirectionName = Direction.RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(ClassName.SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = nextElementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(ClassName.ACTIVE)\n\n $(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE)\n $(nextElement).addClass(ClassName.ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(Event.LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle : true,\n parent : ''\n}\n\nconst DefaultType = {\n toggle : 'boolean',\n parent : '(string|element)'\n}\n\nconst Event = {\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SHOW : 'show',\n COLLAPSE : 'collapse',\n COLLAPSING : 'collapsing',\n COLLAPSED : 'collapsed'\n}\n\nconst Dimension = {\n WIDTH : 'width',\n HEIGHT : 'height'\n}\n\nconst Selector = {\n ACTIVES : '.show, .collapsing',\n DATA_TOGGLE : '[data-toggle=\"collapse\"]'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter((foundElem) => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES))\n .filter((elem) => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(ClassName.COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(Event.SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(ClassName.COLLAPSE)\n .addClass(ClassName.COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(ClassName.COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .addClass(ClassName.SHOW)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(Event.SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n const startEvent = $.Event(Event.HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(ClassName.COLLAPSING)\n .removeClass(ClassName.COLLAPSE)\n .removeClass(ClassName.SHOW)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .trigger(Event.HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(Dimension.WIDTH)\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector =\n `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n\n const children = [].slice.call(parent.querySelectorAll(selector))\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(ClassName.SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(ClassName.COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$this.data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n KEYDOWN_DATA_API : `keydown${EVENT_KEY}${DATA_API_KEY}`,\n KEYUP_DATA_API : `keyup${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DISABLED : 'disabled',\n SHOW : 'show',\n DROPUP : 'dropup',\n DROPRIGHT : 'dropright',\n DROPLEFT : 'dropleft',\n MENURIGHT : 'dropdown-menu-right',\n MENULEFT : 'dropdown-menu-left',\n POSITION_STATIC : 'position-static'\n}\n\nconst Selector = {\n DATA_TOGGLE : '[data-toggle=\"dropdown\"]',\n FORM_CHILD : '.dropdown form',\n MENU : '.dropdown-menu',\n NAVBAR_NAV : '.navbar-nav',\n VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n}\n\nconst AttachmentMap = {\n TOP : 'top-start',\n TOPEND : 'top-end',\n BOTTOM : 'bottom-start',\n BOTTOMEND : 'bottom-end',\n RIGHT : 'right-start',\n RIGHTEND : 'right-end',\n LEFT : 'left-start',\n LEFTEND : 'left-end'\n}\n\nconst Default = {\n offset : 0,\n flip : true,\n boundary : 'scrollParent',\n reference : 'toggle',\n display : 'dynamic'\n}\n\nconst DefaultType = {\n offset : '(number|string|function)',\n flip : 'boolean',\n boundary : '(string|element)',\n reference : '(string|element)',\n display : 'string'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this._element)\n const isActive = $(this._menu).hasClass(ClassName.SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(ClassName.POSITION_STATIC)\n }\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(Selector.NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, relatedTarget))\n }\n\n show() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || $(this._menu).hasClass(ClassName.SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || !$(this._menu).hasClass(ClassName.SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(Event.CLICK, (event) => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(Selector.MENU)\n }\n }\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = AttachmentMap.BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP\n if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND\n }\n } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT\n } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {\n placement = AttachmentMap.LEFT\n } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND\n }\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this._config.offset(data.offsets, this._element) || {}\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return popperConfig\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(ClassName.SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n $(dropdownMenu).removeClass(ClassName.SHOW)\n $(parent)\n .removeClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName)\n ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(ClassName.SHOW)\n\n if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n const toggle = parent.querySelector(Selector.DATA_TOGGLE)\n $(toggle).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler)\n .on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop : true,\n keyboard : true,\n focus : true,\n show : true\n}\n\nconst DefaultType = {\n backdrop : '(boolean|string)',\n keyboard : 'boolean',\n focus : 'boolean',\n show : 'boolean'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n RESIZE : `resize${EVENT_KEY}`,\n CLICK_DISMISS : `click.dismiss${EVENT_KEY}`,\n KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`,\n MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`,\n MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SCROLLABLE : 'modal-dialog-scrollable',\n SCROLLBAR_MEASURER : 'modal-scrollbar-measure',\n BACKDROP : 'modal-backdrop',\n OPEN : 'modal-open',\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n DIALOG : '.modal-dialog',\n MODAL_BODY : '.modal-body',\n DATA_TOGGLE : '[data-toggle=\"modal\"]',\n DATA_DISMISS : '[data-dismiss=\"modal\"]',\n FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT : '.sticky-top'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(Selector.DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n Event.CLICK_DISMISS,\n Selector.DATA_DISMISS,\n (event) => this.hide(event)\n )\n\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => {\n $(this._element).one(Event.MOUSEUP_DISMISS, (event) => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(Event.HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(Event.FOCUSIN)\n\n $(this._element).removeClass(ClassName.SHOW)\n\n $(this._element).off(Event.CLICK_DISMISS)\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS)\n\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach((htmlElement) => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `Event.CLICK_DATA_API` event that should remain\n */\n $(document).off(Event.FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n\n if ($(this._dialog).hasClass(ClassName.SCROLLABLE)) {\n this._dialog.querySelector(Selector.MODAL_BODY).scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(ClassName.SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, (event) => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(Event.RESIZE, (event) => this.handleUpdate(event))\n } else {\n $(window).off(Event.RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(ClassName.OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(Event.HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(ClassName.FADE)\n ? ClassName.FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = ClassName.BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(Event.CLICK_DISMISS, (event) => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n if (event.target !== event.currentTarget) {\n return\n }\n if (this._config.backdrop === 'static') {\n this._element.focus()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(ClassName.SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing =\n this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(ClassName.OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${Selector.STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY)\n ? 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(Event.SHOW, (showEvent) => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(Event.HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter((attrRegex) => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, l = regExp.length; i < l; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach((attr) => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\n animation : 'boolean',\n template : 'string',\n title : '(string|element|function)',\n trigger : 'string',\n delay : '(number|object)',\n html : 'boolean',\n selector : '(string|boolean)',\n placement : '(string|function)',\n offset : '(number|string|function)',\n container : '(string|element|boolean)',\n fallbackPlacement : '(string|array)',\n boundary : '(string|element)',\n sanitize : 'boolean',\n sanitizeFn : '(null|function)',\n whiteList : 'object'\n}\n\nconst AttachmentMap = {\n AUTO : 'auto',\n TOP : 'top',\n RIGHT : 'right',\n BOTTOM : 'bottom',\n LEFT : 'left'\n}\n\nconst Default = {\n animation : true,\n template : '
' +\n '
' +\n '
',\n trigger : 'hover focus',\n title : '',\n delay : 0,\n html : false,\n selector : false,\n placement : 'top',\n offset : 0,\n container : false,\n fallbackPlacement : 'flip',\n boundary : 'scrollParent',\n sanitize : true,\n sanitizeFn : null,\n whiteList : DefaultWhitelist\n}\n\nconst HoverState = {\n SHOW : 'show',\n OUT : 'out'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n}\n\nconst ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n TOOLTIP : '.tooltip',\n TOOLTIP_INNER : '.tooltip-inner',\n ARROW : '.arrow'\n}\n\nconst Trigger = {\n HOVER : 'hover',\n FOCUS : 'focus',\n CLICK : 'click',\n MANUAL : 'manual'\n}\n\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal')\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE)\n }\n\n const placement = typeof this.config.placement === 'function'\n ? this.config.placement.call(this, tip, this.element)\n : this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: (data) => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: (data) => this._handlePopperPlacementChange(data)\n })\n\n $(tip).addClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HoverState.OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(ClassName.SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[Trigger.CLICK] = false\n this._activeTrigger[Trigger.FOCUS] = false\n this._activeTrigger[Trigger.HOVER] = false\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function'\n ? this.config.title.call(this.element)\n : this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this.config.offset(data.offsets, this.element) || {}\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n (event) => this.toggle(event)\n )\n } else if (trigger !== Trigger.MANUAL) {\n const eventIn = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSEENTER\n : this.constructor.Event.FOCUSIN\n const eventOut = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSELEAVE\n : this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(\n eventIn,\n this.config.selector,\n (event) => this._enter(event)\n )\n .on(\n eventOut,\n this.config.selector,\n (event) => this._leave(event)\n )\n }\n })\n\n $(this.element).closest('.modal').on(\n 'hide.bs.modal',\n () => {\n if (this.element) {\n this.hide()\n }\n }\n )\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach((dataAttr) => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n const popperInstance = popperData.instance\n this.tip = popperInstance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(ClassName.FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement : 'right',\n trigger : 'click',\n content : '',\n template : '
' +\n '
' +\n '

' +\n '
'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content : '(string|element|function)'\n}\n\nconst ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n TITLE : '.popover-header',\n CONTENT : '.popover-body'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n this.setElementContent($tip.find(Selector.CONTENT), content)\n\n $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset : 10,\n method : 'auto',\n target : ''\n}\n\nconst DefaultType = {\n offset : 'number',\n method : 'string',\n target : '(string|element)'\n}\n\nconst Event = {\n ACTIVATE : `activate${EVENT_KEY}`,\n SCROLL : `scroll${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DROPDOWN_ITEM : 'dropdown-item',\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active'\n}\n\nconst Selector = {\n DATA_SPY : '[data-spy=\"scroll\"]',\n ACTIVE : '.active',\n NAV_LIST_GROUP : '.nav, .list-group',\n NAV_LINKS : '.nav-link',\n NAV_ITEMS : '.nav-item',\n LIST_ITEMS : '.list-group-item',\n DROPDOWN : '.dropdown',\n DROPDOWN_ITEMS : '.dropdown-item',\n DROPDOWN_TOGGLE : '.dropdown-toggle'\n}\n\nconst OffsetMethod = {\n OFFSET : 'offset',\n POSITION : 'position'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${Selector.NAV_LINKS},` +\n `${this._config.target} ${Selector.LIST_ITEMS},` +\n `${this._config.target} ${Selector.DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(Event.SCROLL, (event) => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window\n ? OffsetMethod.OFFSET : OffsetMethod.POSITION\n\n const offsetMethod = this._config.method === 'auto'\n ? autoMethod : this._config.method\n\n const offsetBase = offsetMethod === OffsetMethod.POSITION\n ? this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map((element) => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n return null\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.target !== 'string') {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window\n ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window\n ? window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset +\n scrollHeight -\n this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n const offsetLength = this._offsets.length\n for (let i = offsetLength; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map((selector) => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)\n $link.addClass(ClassName.ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE)\n // Set triggered links parents as active\n // With both
    and