diff --git a/build/data-uri.template b/build/data-uri.template index cd07453..2a3eb97 100644 --- a/build/data-uri.template +++ b/build/data-uri.template @@ -1,5 +1,4 @@ -@import '../../mixins/import-once'; -@import '../../mixins/data-uri'; +@import '../../mixins/core/all'; @include exports('') { @include register-data-uri('', 'data:;base64,') diff --git a/src/_variables.scss b/src/_variables.scss index 4a54bc1..7595ed8 100644 --- a/src/_variables.scss +++ b/src/_variables.scss @@ -26,3 +26,167 @@ $series-f: #aa46be !default; $base-font-size: 14px !default; $base-font-family: inherit !default; + + +///////////////////////////////////////////////// + + +$font-size: 14px !default; +$font-family: inherit !default; + + +$spacer: 1em !default; + +$padding-x: 14px !default; +$padding-y: 7px !default; + +$border-radius: 2px !default; + + +$accent: #ff6358 !default; +$accent-contrast: #ffffff !default; + +$text-color: #656565 !default; +$bg-color: #ffffff !default; +$border-color: darken($bg-color, 3%) !default; + +$base-text: #656565 !default; +$base-bg: #f6f6f6 !default; +$base-border: darken($base-bg, 3%) !default; + +$hover-text: #656565 !default; +$hover-bg: #ededed !default; +$hover-border: darken($hover-bg, 3%) !default; + +$selected-text: $accent-contrast !default; +$selected-bg: $accent !default; +$selected-border: darken($selected-bg, 3%) !default; + +$transition: background-color .2s ease !default; + +$error: #f31700 !default; +$warning: #ffc000 !default; +$success: #37b400 !default; +$info: #0058e9 !default; + +$series-a: #ff6358 !default; +$series-b: #ffd246 !default; +$series-c: #78d237 !default; +$series-d: #28b4c8 !default; +$series-e: #2d73f5 !default; +$series-f: #aa46be !default; + + +// Widget +$widget-text: $text-color !default; +$widget-bg: $bg-color !default; +$widget-border: darken( $widget-bg, 2 ) !default; + + +// Panel +$panel-text: $widget-text !default; +$panel-bg: $widget-bg !default; +$panel-border: darken( $panel-bg, 2 ) !default; + + +// Popup +$popup-text: $widget-text !default; +$popup-bg: $widget-bg !default; +$popup-border: darken( $popup-bg, 2 ) !default; + + +// Header +$header-text: $base-text !default; +$header-bg: $base-bg !default; +$header-border: darken( $header-bg, 2 ) !default; +$header-gradient: null !default; + +$header-hover-text: $hover-text !default; +$header-hover-bg: $hover-bg !default; +$header-hover-border: darken( $header-hover-bg, 2 ) !default; +$header-hover-gradient: null !default; + +$header-selected-text: $selected-text !default; +$header-selected-bg: $selected-bg !default; +$header-selected-border: darken( $header-selected-bg, 2 ) !default; +$header-selected-gradient: null !default; + + +// Button +$button-text: $base-text !default; +$button-bg: $base-bg !default; +$button-border: darken( $button-bg, 2 ) !default; +$button-gradient: null !default; + +$button-hover-text: $hover-text !default; +$button-hover-bg: $hover-bg !default; +$button-hover-border: darken( $button-hover-bg, 2 ) !default; +$button-hover-gradient: null !default; + +$button-pressed-text: $selected-text !default; +$button-pressed-bg: $selected-bg !default; +$button-pressed-border: darken( $button-pressed-bg, 2 ) !default; +$button-pressed-gradient: null !default; + + +// Input +$input-text: $panel-text !default; +$input-bg: $panel-bg !default; +$input-border: $button-border !default; + +$input-hover-text: $input-text !default; +$input-hover-bg: $input-bg !default; +$input-hover-border: $button-hover-border !default; + +$input-focused-text: $input-text !default; +$input-focused-bg: $input-bg !default; +$input-focused-border: $button-pressed-border !default; + + +// Node +$node-text: $button-text !default; +$node-bg: $button-bg !default; +$node-border: darken( $node-bg, 2) !default; +$node-gradient: null !default; + +$node-hover-text: $button-hover-text !default; +$node-hover-bg: $button-hover-bg !default; +$node-hover-border: darken( $node-hover-bg, 2 ) !default; +$node-hover-gradient: null !default; + +$node-selected-text: $button-pressed-text !default; +$node-selected-bg: $button-pressed-bg !default; +$node-selected-border: darken( $node-selected-bg, 2 ) !default; +$node-selected-gradient: null !default; + + +// List +$list-text: $node-text !default; +$list-bg: $node-bg !default; + +$list-hover-text: $node-hover-text !default; +$list-hover-bg: $node-hover-bg !default; + +$list-selected-text: $node-selected-text !default; +$list-selected-bg: $node-selected-bg !default; + + +// Color maps +$widget-colors: ( $widget-text, $widget-bg, $widget-border ); +$panel-colors: ( $panel-text, $panel-bg, $panel-border ); +$popup-colors: ( $popup-text, $popup-bg, $popup-border ); +$header-colors: ( $header-text, $header-bg, $header-border ); +$header-hover-colors: ( $header-hover-text, $header-hover-bg, $header-hover-border ); +$header-selected-colors: ( $header-selected-text, $header-selected-bg, $header-selected-border ); +$button-colors: ( $button-text, $button-bg, $button-border ); +$button-hover-colors: ( $button-hover-text, $button-hover-bg, $button-hover-border ); +$button-pressed-colors: ( $button-pressed-text, $button-pressed-bg, $button-pressed-border ); +$input-colors: ( $input-text, $input-bg, $input-border ); +$input-hover-colors: ( $input-hover-text, $input-hover-bg, $input-hover-border ); +$input-focused-colors: ( $input-focused-text, $input-focused-bg, $input-focused-border ); +$node-colors: ( $node-text, $node-bg, $node-border ); +$node-hover-colors: ( $node-hover-text, $node-hover-bg, $node-hover-border ); +$node-selected-colors: ( $node-selected-text, $node-selected-bg, $node-selected-border ); +$list-colors: ( $list-text, $list-bg, null ); +$list-hover-colors: ( $list-hover-text, $list-hover-bg, null ); +$list-selected-colors: ( $list-selected-text, $list-selected-bg, null ); \ No newline at end of file diff --git a/src/action-buttons/main.scss b/src/action-buttons/main.scss index 1dc6229..940b55c 100644 --- a/src/action-buttons/main.scss +++ b/src/action-buttons/main.scss @@ -1,3 +1,3 @@ @import '../variables'; -@import '../mixins/import-once'; +@import '../mixins/all'; @import 'theme'; diff --git a/src/animation/main.scss b/src/animation/main.scss index 8aeaebe..6780f91 100644 --- a/src/animation/main.scss +++ b/src/animation/main.scss @@ -1,3 +1,3 @@ -@import '../mixins/import-once'; +@import '../mixins/all'; @import 'container'; @import 'effect'; diff --git a/src/button/main.scss b/src/button/main.scss index 1dc6229..940b55c 100644 --- a/src/button/main.scss +++ b/src/button/main.scss @@ -1,3 +1,3 @@ @import '../variables'; -@import '../mixins/import-once'; +@import '../mixins/all'; @import 'theme'; diff --git a/src/calendar/_layout.scss b/src/calendar/_layout.scss index 6dd1b03..b8d87a5 100644 --- a/src/calendar/_layout.scss +++ b/src/calendar/_layout.scss @@ -1,128 +1,155 @@ @import '../base/layout'; @import '../icons/main'; +$calendar-cell-padding-y: .25rem !default; +$calendar-cell-padding-x: .25rem !default; +$calendar-line-height: 1.25 !default; + @include exports('calendar/layout') { -.k-calendar { - position: relative; - display: inline-block; - width: 16.917em; - overflow: hidden; - border-width: 1px; - border-style: solid; - - td, - .k-link { - text-decoration: none; - } - - .k-action-link { - text-decoration: underline; - } - - .k-header, - .k-footer { + // Base + .k-calendar { + width: 16.917em; position: relative; - text-align: center; - } - - .k-nav-prev, - .k-nav-next { - position: absolute; - top: .16666em; - line-height: 1.8333em; - height: 1.8333em; - } - - .k-nav-prev { left: 1%; } - .k-nav-next { right: 1%; } - - .k-content { - border-spacing: 0; - width: 100%; - height: 14.167em; - border-width: 0; - margin: 0; - table-layout: fixed; - outline: 0; - } - - .k-content, - .k-content th { - text-align: right; - } - - .k-animation-container .k-content { - height: 100%; - } - - .k-nav-fast { - display: inline-block; - width: 75%; - height: 1.8333em; - line-height: 1.8333em; - margin: .16666em -.08333em .3333em 0; - } - - .k-header { - .k-icon { - vertical-align: middle; - } - - .k-link.k-nav-prev, - .k-link.k-nav-next { - height: 1.8333em; - width: 1.8333em; - } - } - - th { - border-bottom-style: solid; - border-bottom-width: 1px; - padding: .4em .45em .4em .1em; - font-weight: normal; - cursor: default; - } - - td { - padding: .08333em; - cursor: pointer; - } - - .k-state-focus { - border-style: dotted; - border-width: .08333em; - padding: 0; - } - - .k-content .k-link { - display: block; + display: inline-flex; + flex-direction: column; overflow: hidden; - min-height: 1.8333em; - line-height: 1.8333em; - padding: 0 .45em 0 .1em; - } - .k-meta-view .k-link { - padding: .25em 0 .3em; - text-align: center; - } - .k-footer { - clear: both; - - .k-nav-today, - > .k-state-disabled { + // Common + .k-link { + padding: $calendar-cell-padding-y $calendar-cell-padding-x; + color: inherit; + line-height: $calendar-line-height; + text-decoration: none; display: block; - height: 100%; - padding: .5em 0; + } + + th { + border-width: 0 0 1px; + border-style: solid; + padding: $calendar-cell-padding-y $calendar-cell-padding-x; + font-weight: normal; + cursor: default; + } + + td { + border-width: 1px; + border-style: solid; + cursor: pointer; + } + + + // Header / footer + & { + + .k-header, + .k-footer { + padding: $calendar-cell-padding-y; + text-align: center; + display: flex; + flex-direction: row; + position: relative; + + .k-link { + @include border-radius( $border-radius ); + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + } + } + + // Footer + .k-footer { + clear: both; + } + + + // Previous / next + .k-nav-prev, + .k-nav-next { + padding: $calendar-cell-padding-y; + width: $calendar-line-height * 1em; + height: $calendar-line-height * 1em; + box-sizing: content-box; + } + .k-nav-prev { left: $calendar-cell-padding-y; } + .k-nav-next { right: $calendar-cell-padding-y; } + + + // Fast navigation + .k-nav-fast { + margin: 0 $calendar-cell-padding-y; + flex: 1; + } + + + // Today + .k-nav-today { + flex: 1; + } + + } + + + // Content + & { + + .k-content { + margin: 0; + width: 100%; + height: 14.167em; + border-width: 0; + border-spacing: 0; + border-collapse: separate; + table-layout: fixed; + float: left; + outline: 0; + } + + .k-content, + .k-content th { + text-align: right; + } + + .k-content td { + @include border-radius( $border-radius ); + border-color: transparent; + } + + .k-animation-container .k-content { + height: 100%; + } + + .k-content .k-link { + overflow: hidden; + } + + .k-weekend, + .k-other-month { + opacity: .6; + } + } + + + // Meta view + .k-meta-view .k-link { + text-align: center; + } + + } + + + + + // Calendar container + .k-calendar-container { + padding: 0; + + .k-calendar { + border-width: 0; } } - .k-nav-today:hover { - text-decoration: underline; - } -} - -} - +} \ No newline at end of file diff --git a/src/calendar/_theme.scss b/src/calendar/_theme.scss index 77f9085..9f6b07c 100644 --- a/src/calendar/_theme.scss +++ b/src/calendar/_theme.scss @@ -1,7 +1,6 @@ @import '../base/states'; @import '../animation/main'; @import './layout'; -@import '../mixins/blend-modes'; @include exports('calendar/theme') { diff --git a/src/calendar/main.scss b/src/calendar/main.scss index 1dc6229..940b55c 100644 --- a/src/calendar/main.scss +++ b/src/calendar/main.scss @@ -1,3 +1,3 @@ @import '../variables'; -@import '../mixins/import-once'; +@import '../mixins/all'; @import 'theme'; diff --git a/src/charts/main.scss b/src/charts/main.scss index 1dc6229..940b55c 100644 --- a/src/charts/main.scss +++ b/src/charts/main.scss @@ -1,3 +1,3 @@ @import '../variables'; -@import '../mixins/import-once'; +@import '../mixins/all'; @import 'theme'; diff --git a/src/dialog/main.scss b/src/dialog/main.scss index 1dc6229..940b55c 100644 --- a/src/dialog/main.scss +++ b/src/dialog/main.scss @@ -1,3 +1,3 @@ @import '../variables'; -@import '../mixins/import-once'; +@import '../mixins/all'; @import 'theme'; diff --git a/src/dropdowns/main.scss b/src/dropdowns/main.scss index 1dc6229..940b55c 100644 --- a/src/dropdowns/main.scss +++ b/src/dropdowns/main.scss @@ -1,3 +1,3 @@ @import '../variables'; -@import '../mixins/import-once'; +@import '../mixins/all'; @import 'theme'; diff --git a/src/example/main.scss b/src/example/main.scss index 1dc6229..940b55c 100644 --- a/src/example/main.scss +++ b/src/example/main.scss @@ -1,3 +1,3 @@ @import '../variables'; -@import '../mixins/import-once'; +@import '../mixins/all'; @import 'theme'; diff --git a/src/grid/_theme.scss b/src/grid/_theme.scss index 2925312..945f33a 100644 --- a/src/grid/_theme.scss +++ b/src/grid/_theme.scss @@ -1,6 +1,5 @@ @import '../base/states'; @import './layout'; -@import '../mixins/blend-modes'; $grid-header-color: $accent !default; $grid-color: $normal-text-color !default; diff --git a/src/grid/main.scss b/src/grid/main.scss index 1dc6229..940b55c 100644 --- a/src/grid/main.scss +++ b/src/grid/main.scss @@ -1,3 +1,3 @@ @import '../variables'; -@import '../mixins/import-once'; +@import '../mixins/all'; @import 'theme'; diff --git a/src/icons/font/KendoUIGlyphs.scss b/src/icons/font/KendoUIGlyphs.scss index e06be24..60e41ef 100644 --- a/src/icons/font/KendoUIGlyphs.scss +++ b/src/icons/font/KendoUIGlyphs.scss @@ -1,5 +1,4 @@ -@import '../../mixins/import-once'; -@import '../../mixins/data-uri'; +@import '../../mixins/core/all'; @include exports('KendoUIGlyphs.woff') { @include register-data-uri('KendoUIGlyphs.woff', 'data:application/font-woff;base64,d09GRgABAAAAAFRcAAsAAAAAVBAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxIGKmNtYXAAAAFoAAAAXAAAAFzpP+fiZ2FzcAAAAcQAAAAIAAAACAAAABBnbHlmAAABzAAATFwAAExcrd7VfGhlYWQAAE4oAAAANgAAADYIP7q3aGhlYQAATmAAAAAkAAAAJAfCBGJobXR4AABOhAAAAoQAAAKEegBdnmxvY2EAAFEIAAABRAAAAURTqGb2bWF4cAAAUkwAAAAgAAAAIADDANhuYW1lAABSbAAAAc4AAAHOffZ383Bvc3QAAFQ8AAAAIAAAACAAAwAAAAMD/QGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA6QMDwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEAEAAAAAMAAgAAgAEAAEAIOaY6QP//f//AAAAAAAg5gDpAP/9//8AAf/jGgQXnQADAAEAAAAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABASIBAALeAoAAAwAAAQMhAwIA3gG83gKA/oABgAAAAAEBQADiAsACngADAAABJRElAsD+gAGAAcDe/kTeAAAAAQEiAQAC3gKAAAMAAAEDIQMCAN4BvN4BAAGA/oAAAAABAUAA4gLAAp4AAwAAASURJQFAAYD+gAHA3v5E3gAAAAIBAAEAAwACwAADAAgAAAETIRMlFSE1IQIA3v5E3gEA/gACAAKA/oABgEBAQAAAAAIBQADAAwACwAADAAgAAAEFEQUTESMRMwLA/oABgEBAQAHA3gG83gEA/gACAAAAAAIBAADAAwACgAADAAgAAAEDIQMFITUhFQIA3gG83gEA/gACAAEAAYD+gEBAQAAAAAIBAADAAsACwAADAAgAAAElESUDMxEjEQFAAYD+gEBAQAHA3v5E3gEA/gACAAAAAAEBQAGAAsACQAADAAABByEnAgDAAYDAAkDAwAABAcABAAKAAoAAAgAAARE3AcDAAoD+gMAAAAAAAQFAAUACwAIAAAIAAAEhFwLA/oDAAgDAAAAAAAEBgAEAAkACgAADAAABFxEHAYDAwAHAwAGAwAABAQABQAMAAkAAAgAACQEhAgABAP4AAkD/AAAAAQGAAMACgALAAAMAAAkBEQECgP8AAQABwP8AAgD/AAABAQABQAMAAkAAAgAAASEBAQACAP8AAkD/AAAAAQGAAMACgALAAAIAAAERAQKA/wACwP4AAQAAAAEBQAEAAsACgAACAAABEQECwP6AAoD+gAGAAAABAUABAALAAoAAAgAAASEBAsD+gAGAAQABgAAAAQFAAQACwAKAAAIAAAERAQFAAYABAAGA/oAAAAEBQAEAAsACgAACAAABIQEBQAGA/oACgP6AAAABAQAAwAMAAsAAAgAAASEBAwD+AAIAAsD+AAAAAQEAAMADAALAAAIAACUhAQMA/gACAMACAAAAAAEBAADAAwACwAACAAAlIQEBAAIA/gDAAgAAAAABAQAAwAMAAsAAAgAAASEBAQACAP4AAsD+AAAAAQDAAUADQAKAAAUAAAkCMzcXA0D+wP7AgMDAAUABQP7AwMAAAQFAAIACgAMAAAUAACUJARUXBwFAAUD+wMDAgAFAAUCAwMAAAQDAAQADQAJAAAUAAAEHJyMJAQLAwMCAAUABQAJAwMD+wAFAAAAAAAEBgACAAsADAAAFAAABJzc1CQECwMDA/sABQAEAwMCA/sD+wAAAAAADAEAAAAPAA4AAEAAoADkAAAE4ATEHMBQxFzAyMTc4ATUnBzAiMQE4ATEwBjEDOAExJTA2MQEwNDEnATgBMSc4ATUBMDIxFzAUMQEDC1q0AVq1hwH+NgF4AS0BAcq0/nwtAbABLP5QA4BaAbRaAbSI/jYB/tN4AQHKAbT9yC0BAbAtAf5QAAAAAQEAAMADAALAABIAAAEHFxUjJwcjJzU3JzU3Mxc3MxUDAL6+PsDAQALCwgJAwMA+An6+vkLAwAI8wsI8AsDAQgAAAAABAKQAbANOAtYABgAAARcBJTcXAQMGSP54/t4b+QFOAtZo/f7ceMEB1wAAAAMAgABAA4ADQAAUACEALgAAASIOAhUUHgIzMj4CNTQuAiMBFAYHAT4BMzIeAhUhNDY3AQ4BIyIuAjUCAFCLaTw8aYtQUItpPDxpi1ABQCci/kApZjpCdVcy/YAnIgHAKWY6QnVXMgNAPGmLUFCLaTw8aYtQUItpPP6AOmYpAcAiJzJXdUI6Zin+QCInMld1QgAAAAAFAIAAQANAA4AABAAJABEAFgAbAAABMxEjETsBESMREyERIxEhESMlIRUhNSUzFSM1AYBAQIBAQID+wEABwED+AALA/UABAMDAAoD+QAHA/kABwP4AAgD9wAJAgEBAgEBAAAAAAQDAAIADQAMAAAsAAAEhESMRIRUhETMRIQNA/wCA/wABAIABAAIAAQD/AID/AAEAAAAAAAEBQAEAAsACgAALAAABIzUjFSMVMxUzNTMCwICAgICAgAIAgICAgIAAAAAAAQDAAYADQAIAAAQAABMhFSE1wAKA/YACAICAAAEBQAGAAsACAAAEAAABIRUhNQFAAYD+gAIAgIAAAAAAAQDA//ADQALwAAgAABMVARE3EQE1IcABAIABAP2AAvBM/wD+TLABBAEATAACAMD/8ANMA7wACAARAAABBwE3FyEVBxcnBxEHEQE1MwEDTCr9wCrMAWiOmvIagP8AaAEyAXwqAkAqzEyOmkIa/vywAbQBAEz+zgAAAQDBAEADPwMhACcAAAEeARUUDgIjIi4CNTQ+Ajc1Fwc1DgEVFB4CMzI+AjU0Jic3AvwfJDJXdEJCdFcyJ0VdN/z8SmElP1UxMFY/JR4bSwJDKWQ3QnRXMjJXdEI6aFM5C2mRkmMVfFEwVj8lJT9WMCxOHysAAAAAAgBUABQDvwN/AB0ANgAAAT4BNTQmJwceARUUBgcBPgE3FTcnFQ4BBycHATcnByIuAjU0NjcnDgEVFB4CMzI2NycOASMC/h4jJB9LGx4WE/69DyIS/PwkQBzCKwNAK8H+MVU/JQECRQkKMld0Qh02GUUJFAoBAChhNjdkKSsfTiwkQhwBRAoRBWOSkWkHHxXCK/zAK8ErJT9WMAoUCkUaNh1CdFcyCwlFAgIAAAMAgABAA4ADQAAEAAkAEAAAExEhESEBIREhEQERIxEhNSGAAkD9wAHA/sABQAFAgP5AAkACgP3AAkD+QAFA/sACgP3AAcCAAAIAwACAA0ADAAAEAAkAABMRIREhASERIRHAAoD9gAIA/oABgAMA/YACgP4AAYD+gAAAAAABAMAAgANAAQAABAAAEyEVITXAAoD9gAEAgIAAAgEAAIACwAMAAAwAEQAAAREhESMVMxEzETM1IyERMxEjAoD+wEDAQMBA/wCAgAHAAUD+wED/AAEAQAEA/wAAAAIAwAEAA0ACwAANABIAAAEhNSMVIRUhFTM1IREjFSE1IRUDAP8AQP8AAQBAAUBA/wABAAKAQMBAwEABQMCAgAADAIAAQAOAA0AADAARABYAAAE1IxUhNSMVIxEhESMTIREhEQEzFSM1AwCA/wCAgAMAgED9gAKA/sDAwALAgICAgP2AAoD9wAHA/kABQMDAAAMAgABAA4ADQAAUACkALwAAASIOAhUUHgIzMj4CNTQuAiMRIi4CNTQ+AjMyHgIVFA4CIxEjESE1IwIAUItpPDxpi1BQi2k8PGmLUEJ1VzIyV3VCQnVXMjJXdUJAAQDAA0A8aYtQUItpPDxpi1BQi2k8/UAyV3VCQnVXMjJXdUJCdVcyAgD/AEAAAAAAAwBAAAADwAOAABQAKQAyAAABIg4CFRQeAjMyPgI1NC4CIwEUDgIjIi4CNTQ+AjMyHgIVARQGIyc0NjMXAYBCdVcyMld1QkJ1VzIyV3VCAQAoRl01NV1GKChGXTU1XUYoAUBLNcBLNcADgDJXdUJCdVcyMld1QkJ1VzL+wDVdRigoRl01NV1GKChGXTX+QDVLwDVLwAAAAAAEAEAAAAPAA4AAFAApADIAPwAAASIOAhUUHgIzMj4CNTQuAiMRIi4CNTQ+AjMyHgIVFA4CIwUUBiMnNDYzFwEjFSM1IzUzNTMVMxUBgEJ1VzIyV3VCQnVXMjJXdUI1XUYoKEZdNTVdRigoRl01AkBLNcBLNcD+gICAgICAgAOAMld1QkJ1VzIyV3VCQnVXMv3AKEZdNTVdRigoRl01NV1GKMA1S8A1S8ABgICAgICAgAAAAAAEAEAAAAPAA4AAFAApADIANwAAASIOAhUUHgIzMj4CNTQuAiMRIi4CNTQ+AjMyHgIVFA4CIwUUBiMnNDYzFwEhNSEVAYBCdVcyMld1QkJ1VzIyV3VCNV1GKChGXTU1XUYoKEZdNQJASzXASzXA/oD+gAGAA4AyV3VCQnVXMjJXdUJCdVcy/cAoRl01NV1GKChGXTU1XUYowDVLwDVLwAGAgIAAAAQAAABABAADgAAJABAAFQAaAAABNQEhESMRIREjASEVMxUhEQEVIzUzASE1IRUDQP8A/oDABADA/cABQMD+AAFAgIABAP2AAoABwMABAP5A/oABgAGAwMABgP5AQED/AICAAAADAAAAAAQAA0AABgATABwAAAEhESMRIRUBIzUjFSMVMxUzNTM1AxUhESEVIREhAkD+gEABwP8AgECAgECAQALA/cACgP0AAwD+gAHAQP3AgIBAgIBAAgBA/kBAAkAAAAADAAAAAAQAA0AABgAPABcAAAEhESMRIRUFFSERIRUhESETJwczETMRMwJA/oBAAcD+wALA/cACgP0AQKCggECAAwD/AAFAQEBA/kBAAkD+QMDA/wABAAAABAAAAAAEAANAAAoAFgAcACkAAAEhETMRIREhFSERASMVIxUzFTM1MzUjJScHFSEDNxQGIyImNTQ2MzIWFQPA/MBAAwD9wAKA/MBAgIBAgIABgMCAAoDAwCUbGyUlGxslA0D+QAGA/cBAAsD+AIBAgIBAwMDAgAEAgBslJRsbJSUbAAAABABAAIADwANAAAQACQAPABwAABMRIREhASERIREnAwcnBxUBFAYjIiY1NDYzMhYVQAOA/IADQP0AAwBAwIDAgAKAJRsbJSUbGyUDQP1AAsD9gAJA/cBAAQCAwMCAAYAbJSUbGyUlGwABAQD/wAMAA8AAMgAABSIuAjURNDYzMhYVERQGIyImNREzERQWMzI2NRE0JiMiBhURFBYzMjY1ETMRFA4CIwIANV1GKHFPT3FLNTVLQCYaGiZLNTVLcU9PcUAoRl01QChGXTUCQE9xcU/+QDVLSzUBgP6AGiYmGgHANUtLNf3AT3FxTwIA/gA1XUYoAAIAwABAA0ADgAAFAAwAAAEhESERAQERIRUzESECQP6AAoD/AP7AAUDA/gADgPzAAkABAP0AAsDA/gAAAAMAgP/ABAADwAAJAA8AFgAAEyEVMychETM1IwEhESERAQERIRUzESHAAUCAgP6AwIACQP6AAoD/AP7AAUDA/gADgECA/MBAAkD8wAJAAQD9AALAwP4AAAAHAIAAQAOAA4AACQAbACYANwBCAFMAYwAAASERIxEzFSERAQEVIzUzMhYXHgEVFAYHDgErARc1IREhESEVMxEhNzUzMhYXHgEdARQGBw4BKwElFSMVIzUzFSMVMycjFTMyNjc+AT0BNCYnLgEjBz4BNTQmJy4BKwEVMzI2NwKA/oCAgAKA/wD+fyVJDxkJCQkJCQkZECNBAcD+QAFAwP4AQT4RGwsLCwsLCxsRPgEYTCR9WUzcGBgKEAUGBQUGBRAKgwQDAwQEDAgjJAcMBAOA/oD+wIACQAEA/cdCtggICBUNDRUICAjHQAFAAUDA/gCFtgsKCxsRHhEbCwoLaBxMthwyMn4HBgcRCx4LEQcGBzQFCgcGCwQFBDwEBAAAAAAFAIAAQAOAA4AACQAWACEAKAB1AAABIREjETMVIREBATMXNzMHFyMnByM3JxM1IREhESEVMxEhNxUjNTMVMzcuAScuAScuATU0Njc+ATMyFhceARUrATQmJy4BIyIGBw4BFRQWFx4BFx4BFx4BFRQGBw4BIyImJy4BNTEzFBYXHgEzMjY3PgE1NCYnAoD+gICAAoD/AP5hKiIiKjY5LCMjKzg2XwHA/kABQMD+AMV2JVFwBA0JERgJCAgJCgkZDw8YCgkJASMEBAULCAcMBAQEBQQEDwoPFwgICAoJCRgQDhoLDAokBQUFDggICwQEBAQDA4D+gP7AgAJAAQD+O0FBWlxCQlxa/sVAAUABQMD+AKEctpokBAYCBQsHBhILCxIHCAcICAgUDAYKBAQEAwQDCAUFCAIDBwMECwcHEgsMEgcHBwgIBxYOCAwDBAQDAwMIBgUIAwAAAAMAgABAA4ADgAAJABwAJwAAASERIxEzFSERAQEjJzU3JzU3Mxc3MxUHFxUjJwcXNSERITUhFTMRIQKA/oCAgAKA/wD+aSgBeXkBKHh4J3d3J3h4VwEA/wABQMD+AAOA/wD+QIACQAEA/YABJnl5JgF4eCl3dyl4eIBAAcDAwP4AAAAAAAIBAACAAwADQAANABcAAAE1NCYjIgYdASMRIREjJTQ2MzIWHQEhNQLAcU9QcEACAED+wEs1NUv/AAIAgFBwcFCA/oABgIA1S0s1gIAAAAAAAQCAAIADgANAABYAAAE1NCYjIgYdATM1NDYzMhYdASMRIREhAgBwUFBwQEs1NUtAAgD+gAIAgFBwcFDAwDVLSzWA/oABgAAAAwCAAEADgAOAAAQACQAOAAABFSE1IQEVITUhERUhNSEDgP0AAwD9AAMA/QADAP0AAQDAwAFAwMABQMDAAAAAAAMAQABAA4ADQAAEAAkADgAAJSMRMxEBIxEzESEjETMRAQDAwAFAwMABQMDAQAMA/QADAP0AAwD9AAMAAAMAQACAA8ADAAAEAAkADgAAASE1IRUVIRUhNREhFSE1A8D8gAOA/IADgPyAA4ACgICAgICA/wCAgAAAAAEBwABAAkADQAAEAAABMxEjEQHAgIADQP0AAwAAAAAAAQCAAYADgAIAAAQAABMhFSE1gAMA/QACAICAAAIBQABAAoADQAAEAAkAAAEzESMROwERIxEBQICAwICAA0D9AAMA/QADAAAABACAAIADQANAAAQACQAOABMAAAEhESERASERIREBIREhESkBESERAcD+wAFAAYD+wAFA/oD+wAFAAYD+wAFAAgABQP7AAUD+wAFA/oD+wAFA/sABQAAAAAQAgABAA4ADQAAEAAkADgATAAABMxUjNSUhESERASERIREpAREhEQEAwMABQAFA/sD+QAFA/sABwAEA/wACwMDAgP7AAUD+QP7AAUD/AAEAAAAAAAEAgABAA4ADQAARAAAlJxUhETMnBzMRIxUzFTM1IRUDgMD+gICgoICAgEABgOCggAGAwMD+gECAgIAAAAEAgACAA0ADQAAeAAABIgYHIxEjLgEjIgYVFBYzMjY3MxEzHgEzMjY1NCYjAuAfMQrGhgoxHyg4OCgfMQrGhgoxHyg4OCgDQCQc/gAcJDgoKDgkHAIAHCQ4KCg4AAAAAAIBQABAAsADQAADAAcAAAETIRMREyETAgDA/oDAwP6AwANA/sABQP0AAUD+wAAAAAEAwAFAA0sCQAARAAABIgYHJxEhJz4BMzIWFzcuASMCOk6KNG4BAGQrckFEdSwsNIxRAkA7M27/AGQrMTUsLDY/AAAAAQC1AUADQAJAABEAAAEyFhc3ESE3LgEjIgYHJz4BMwHGToo0bv8AZCtyQUR1LCw0jFECQDszbv8AZCsxNSwsNj8AAAABAEAAUAPAAxkAEAAAATUJATUyHgIXMzU0LgIjAgD+QAHATotyURQQRnqjXQKXgv79/v2GMVh5R4dcpHlHAAAAAQBAAFADwAMZABAAADcVMz4DMxUJARUiDgIVQBAUUXKLTgHA/kBdo3pG14dHeVgxhgEDAQOCR3mkXAAAAwBAAEAEAANAAAMABwASAAABESEBExEhAQEjNQcXNTMVMzUjAcD+gAGAQAIA/gABQICAgIBAQANA/QADAP4A/wABAAEAYICAYIDAAAMAAABAA8ADQAADAAcAEQAAJSERASkBEQEBJxUjFTM1MxU3A8D+gAGA/EACAP4AAcCAwECAgEADAP0AAQD/AAHggGDAgGCAAAMAQAAAA8ADfgAoADUAQgAAASIGBycBNwkBFwEHLgEjIgYVFBYzMjY1NCYnNxcOARUUFjMyNjU0JiMBIiY1NDYzMhYVFAYjISImNTQ2MzIWFRQGIwMgEB8PoAECJP6Y/pgkAQKgDx8QQl5eQkJeBwaNjQYHXkJCXl5C/cAoODgoKDg4KAJAKDg4KCg4OCgBQAYGoAEwev6YAWh6/tCgBgZeQkJeXkIRIA6npw4gEUJeXkJCXv8AOCgoODgoKDg4KCg4OCgoOAAAAwCAAAADgAOAAAkADwAWAAATMxUzJyERMzUjASERIREBAxEzFTMRIcDAgID/AMCAAcD/AAIA/wDAwMD+gANAQID9QEABwP1AAcABAP2AAkDA/oAAAwDAAAADQAPAAAQACgAVAAABITUhFRcRASERIQcjFSE1IxEhNTMRAoD/AAEAwP8A/oACgEBA/oBAAUDAA4BAQED9wP8AA0BAQED9QMACAAADAQAAgAMNAz0AGwArADsAACURMzIWFx4BFRQGBw4BBx4BFx4BFRQGBw4BIyETMzI2Nz4BNTQmJy4BKwEVHQEzMjY3PgE1NCYnLgErAQEA7T5gIyMiDQwNJhgfMA8QECEiIV49/vKNZRwrDw8QEA8PLh5ggRwrDg8PDQwNJxuMgAK9GBgYSDAYLBMTHQoGHRYWNB0yTBoaGgGXDAsMIhYYJAwLDLphygwNDCQXGicODQ4AAAABAMAAQALWAwAAJgAAATchByIGBw4BBwMOARUUFhceARcHITcyNjc+ATcTPgE1NCYnLgEnAXgGAVgHFyQMDRUKgQcHCAcJJBoG/qMGGiYNDBYKgQYGBwcHIxwC7RMTCwoKLCH+PhggCAkPBQcHARMTCgoKLCIBwhUfCwoPBQYHAgAAAAACAMAAAANAAwAAFgAbAAABERQWMzI2NREzERQOAiMiLgI1ETMDIRUhNQFcXEZMXFsoRmA4NltCJlqcAoD9gAMA/qV0aGpyAVv+q1BxSCIgRnFRAVj9QEBAAAAAAAYAQAD5A8ACqAAeACwAQwBXAHIAdwAAARQWFyMnIw4BIyImNTQ2MzU0JgciBgcnPgEzMhYdAScmBhUUFjMyNjc+AT0BEzMVMz4BMzIWFRQGIyImJyMHIz4BNRETFBYXHgEzMjY1NCYjIgYHDgEdAQUOASMiJjU0NjMyFhcHLgEjIgYVFBYzMjY3FyU1IRUhATcCAi8EAgwuHywsWlQVLRQpDwwSMxtCLDMrUB4THSQHAQGINAEOMiM2RFIwIDERAQMtAQI0AQEHKx0qLiwrGi0IAgEB7gosHUFPVEcYJgsMCR4WMTU6KxYfCwn8kgOA/IABRRMjDyQRGjQfNTcGEjEBCwojCw5KLGxPARgrGhgeEwQJAzMBFLUYHFFCTU4aHC8PKBQBXf7MBQoEGyM+MSxAIx0FCwczagUMUkJDVwoFKAUIQC0yOgkFKHgeHgAAAAIBAACAAwAC5AAIABMAAAEHIxMzEyMnIzcnLgEnIw4BDwEzAZE/UtFe0VRC2co9Cg8HAgYPCTy5AUDAAmT9nMA+sB43Gxs4HLEAAAACAHEAPwOFA18AZQDVAAABBw4BBw4BBw4BIyImJy4BNTQ2Nz4BMzIWFx4BFRQGBw4BFRceATMyNjc+ATc+ATcTIzcyNjc+ATc+ATc+ATMyFhceARUUBgcOASMiJicuATU0Njc+ATU0JicuASMiBgcOAQczByMXNx4BFz4BNz4BNz4BMzIWFx4BFRQGBw4BIyImJy4BIyIGBw4BBx4BFx4BMzI2Nz4BNxcOAQcOASMiJicuAScuAScOAQcOAQcOASMiJicuATU0Njc+ATMyFhceATMyNjc+ATc+ATcuAScuASMiBgc3AeozEiMRESgXFjUdExsJCQgHBwcTDAoPBQYFBAMDAwIBAwIGDAQMEQYEDwtZPQ8QGAgHEAgYMxsaPCEVHgoJCgcGBhAKCA8FBgYEAwQEAgIBBQINGw0XIw4/Dz4+gBIZBxIbCQ0UCAgRCQoQBQYFBQYFDggGDQgHCwMIDwcJGA4QGQkGCwYFCAQFEAsOER8QDBcLDBQIBw4GBw4IFiIMDBUICBEJCg8GBQYGBgYQCQULBwkNBAYJBAYOCAYTDREcCgYQCgUMBwMCVspHaCAgMA8QDwcHBxEJCRAGBwcFBQUNCAcKBAMEAgMBAQQECxkOCjYrAV0zBAUEFA8sQBMUEwgICBUNDBIGBwcGBQYNBwYLBwYIAgMEAQIBEBAZUTgzVRccPCEaJgoPEwQEBAUGBQ8JCQ8FBgYDAgICBgUIIBk3RAwHBwIDAxQPBxslCggJBQYFEQwMJhobKA0NEAQEBAYFBg4JCRAGBgYDAwQFAgMCDAoFGRJCTw0ICAECDgACAIAAQAN6AsAAEgBAAAABMxUHFxUjJwcjJzU3JzU3Mxc3Eyc3PgE3PgE1NCYnLgEjIgYHDgEVFzM0Njc+ATMyFhceARUUBgcOAQ8BFTM1IwJCPr6+PsDAQALCwgJAwMDWASIRFwYGBgsMDCAVEyAMDAsBOQQEAwsGCAsDBAQEAwQLCFGwYgLAQr6+QsDAAjzCwjwCwMD9rQElEhsJChUMERwLCgoMDAweEgEJDgYFBgQFBAwHBQwHBxAJVSYtAAACAIAAwAN6A0AAEgBAAAABMxUHFxUjJwcjJzU3JzU3Mxc3Fyc3PgE3PgE1NCYnLgEjIgYHDgEVFzM0Njc+ATMyFhceARUUBgcOAQ8BFTM1IwJCPr6+PsDAQALCwgJAwMDWASIRFwYGBgsMDCAVEyAMDAsBOQQEAwsGCAsDBAQEAwQLCFGwYgLAQr6+QsDAAjzCwjwCwMBTASUSGwkKFQwRHAsKCgwMDB4SAQkOBgUGBAUEDAcFDAcHEAlVJi0AAAADAMAAQAMAA0AAFAApADIAAAEwDgIVFB4CMzI+AjU0LgIxESIuAjU0PgIxMB4CFRQOAiMTFAYjNTI2NTMB4FpsWi1OaTw8aU4tWmxaLlI9I0ZURkZURiM9Ui6AXkIoOEADQFeKq1Q8aU4tLU5pPFSrilf9QCM9Ui5IjW9FRW+NSC5SPSMBAEJeQDgoAAEAwABAAwADQAALAAABIRUJARUhNSEJASEDAP3AAQD/AAJA/kABAP8AAcADQID/AP8AgIABAAEAAAAAAAkAmgBAA4ADgAAOAB0ALAA7AEoAWQBeAGMAZgAAASIGHQEUFjMyNj0BNCYjFxQGIyImPQE0NjMyFh0BAyIGHQEUFjMyNj0BNCYjFxQGIyImPQE0NjMyFh0BBSIGHQEUFjMyNj0BNCYjFxQGIyImPQE0NjMyFh0BBTMVIzUBMxUjNQMRJwMANUtLNTVLSzVAJRsaJiYaGyVANUtLNTVLSzVAJRsaJiYaGyX+gDVLSzU1S0s1QCYaGiYmGhom/sBAQAFAQECA5gHASzWANUtLNYA1S+wjMjIjVSQyMiRVAqxLNYA1S0s1gDVL7CMyMiNVJDIyJFXUSzWANUtLNYA1S+wjMjIjVSQyMiRVVEBAAcBAQAFA/oDAAAAJAIAAQAOAA4AADgAdACwAOwBKAFkAXgBjAGcAAAEiBh0BFBYzMjY9ATQmIxcUBiMiJj0BNDYzMhYdAQciBh0BFBYzMjY9ATQmIxcUBiMiJj0BNDYzMhYdAQEiBh0BFBYzMjY9ATQmIxcUBiMiJj0BNDYzMhYdAQUjNTMVASM1MxUnBxEXAwA1S0s1NUtLNUAlGxomJhobJUA1S0s1NUtLNUAlGxomJhobJf6ANUtLNTVLSzVAJhoaJiYaGib/AEBAAUBAQNrm5gOASzWANUtLNYA1S+wjMjIjVSQyMiRV1Es1gDVLSzWANUvsIzIyI1UkMjIkVQKsSzWANUtLNYA1S+wjMjIjVSQyMiRVlEBA/kBAQMDAAYDAAAAAAAYAgACAA4ADQAAEAAkADgATABgAHQAAASE1IRUVIRUhNSchFSE1ESEVITURIRUhNTchFSE1A4D9AAMA/QADAMD9wAJA/cACQP3AAkDA/QADAAMAQEDAQECAQED/AEBA/wBAQIBAQAAABgCAAIADgANAAAQACQAOABMAGAAdAAATIRUhNREhNSEVNyE1IRURITUhFREhNSEVJyE1IRWAAwD9AAMA/QCAAgD+AAIA/gACAP4AgAMA/QADQEBA/sBAQIBAQP8AQED/AEBAgEBAAAAGAIAAgAOAA0AABAAJAA4AEwAYAB0AABMhFSE1ESE1IRU3ITUhFREhNSEVESE1IRUnITUhFYADAP0AAwD9AMACQP3AAkD9wAJA/cDAAwD9AANAQED+wEBAgEBA/wBAQP8AQECAQEAAAAYAgACAA4ADQAAEAAkADgATABgAHQAAEyEVITURITUhFTUhNSEVESE1IRURITUhFTUhNSEVgAMA/QADAP0AAwD9AAMA/QADAP0AAwD9AANAQED+wEBAgEBA/wBAQP8AQECAQEAAAAAABgBU//kD2gN/AAQACQAOABMAFwA1AAA3IRchNTUhJyEVNSEnIRU1MycjFTUzJxUBMzUjFSczNSEVJyE1IRUnITUhFSchNSEVJwcBNyeAAgBA/cABwED+gAFAQP8AwECAQEACvkKAQsL/AEIBQv6AQgHC/gBCAkL9gIErA1osnIBAQEBAQIBAQIBAQIBAQP6AQAJCQAJCQAJCQAJCQAKBK/ylLJsAAAAAAwCAAkADgAOAAAQACQAOAAATIRUhNREhNSEVNyE1IRWAAwD9AAMA/QBAAoD9gAOAQED+wEBAgEBAAAAAAwCAAUADgAKAAAQACQAOAAATIRUhNREhNSEVNyE1IRWAAwD9AAMA/QBAAoD9gAKAQED+wEBAgEBAAAAAAwCAAAADgAFAAAQACQAOAAATIRUhNREhNSEVNyE1IRWAAwD9AAMA/QBAAoD9gAFAQED+wEBAgEBAAAAABwCAAIADgANAAAQACQAOABMAGAAdACEAABMhFSE1ASE1IRU1ITUhFREhNSEVASE1IRU1ITUhFRkBNyeAAwD9AAGAAYD+gAGA/oABgP6A/oADAP0AAwD9AMDAA0BAQP7AQECAQED/AEBA/wBAQIBAQAHA/sCgoAAABwCAAIADgANAAAQACQAOABMAGAAdACEAABMhFSE1ASE1IRU1ITUhFREhNSEVASE1IRU1ITUhFREXEQeAAwD9AAGAAYD+gAGA/oABgP6A/oADAP0AAwD9AMDAA0BAQP7AQECAQED/AEBA/wBAQIBAQAEgoAFAoAAABAAAAIAEAAKgAAQACAANABIAAAEhNSEVNxcRBwchFSE1FSEVITUCwP1AAsCAwMCA/oABgP6AAYABwEBAIMABgMCgQECAQEAABAAAAQAEAALAAAMACAANABIAAAE3EScHIRUhNREhFSE1FSEVITUDQMDAgP6AAYD+gAGA/UACwAHgwP6AwKBAQAGAQEDAQEAABAAAASAEAANAAAQACAANABIAAAEhNSEVNxcRBychFSE1NSEVITUCwP1AAsCAwMCA/oABgP6AAYABwEBAIMABgMDgQECAQEAABgCAAIADgANAAAQACQAOABsAKAA1AAABIRUhNREhNSEVESE1IRUDIgYVFBYzMjY1NCYjESIGFRQWMzI2NTQmIxEiBhUUFjMyNjU0JiMBgAIA/gACAP4AAgD+AKAoODgoKDg4KCg4OCgoODgoKDg4KCg4OCgDAEBA/sBAQP8AQEACgDgoKDg4KCg4/wA4KCg4OCgoOP8AOCgoODgoKDgAAAYAdwBGA4ADYAAEAAkADgAdAFUApAAAASEVITURITUhFREhNSEVAyMOAQcOAQcVPgE3FTM1Az4BNz4BNz4BNz4BNz4BNTQmJy4BIyIGBw4BBxc+ATc+ATMyFhceARUUBgcOAQcOAQcOAQczNSMDHgEzMjY3PgE1NCYnLgEnPgE1NCYnLgEjIgYHDgEHDgEHFz4BNz4BMzIWFx4BFRQGBw4BIwc+ATMyFhceARUUBgcOASMiJicuAScHHgEXAYACAP4AAgD+AAIA/gCOJQQPCgsTCREeDC42AgUDAw0LCw8EBgoCAwMKCgocERAbCwsNAi4BBAUECwcICwQEBAQFBBMPExoGBwgBoFsoCxoRERwMCwwHBgYQChERCAkKGxEKEQgIDQQFBgIqAQUEBAoGBgkEAwQFBQUOCQUGCwQHCwQFBQUFBQwHBgwEBQUCLAIMCwMAQED+wEBA/wBAQAKgCxMICAsDKgYRDKzv/jMDBgMDDgoJEAUIDwgHDwgOGAkKCQgICBsTBQoPBAQFBQQECwgHDgcFFA4SHQoLFwwr/sYJCgsLCxsQCxIICAkDCRkQCxQICwsEBAMKBwYSCggIDAQEBAMEAwoGBwsFBAQlAgEFBQUNCQkPBQUGBQQFDQgFDxkJAAAEAIAAgAOAAwAABAAJAA4AEwAAASM1MxUXIRUhNRchFSE1FyEVITUBQMDAwP6AAYDA/cACQMD9AAMAAsBAQIBAQMBAQMBAQAAEAIAAgAOAAwAABAAJAA4AEwAANzMVIzU1IRUhNTUhFSE1NSEVITWAwMABgP6AAkD9wAMA/QDAQEDAQEDAQEDAQEAAAAQAgACAA4ADAAAEAAkADgATAAABIRUhNTchFSE1JSM1MxUBIRUhNQIA/oABgMD9wAJA/oDAwAJA/QADAAGAQEDAQECAQED+AEBAAAADAAAAwAQAAsAAGQApAEMAACUiJiczMjY1NCYrAT4BMzIeAhUUDgIjMQE0NjMhMhYVFAYjISImNTEjFBY7AQ4BIyIuAjU0PgIzMhYXIyIGFTEDAEd1It41S0s13iJ1RzVdRigoRl01/gAmGgGAGyUlG/6AGiaASzXeInVHNV1GKChGXTVHdSLeNUvARzlLNTVLOUcoRl01NV1GKAEAGyUlGxslJRs1SzlHKEZdNTVdRihHOUs1AAAADABA/+IEAAOeAA4AEgAWAB8AIwAsADAAPwBIAFEAVgBbAAABNCYrASIGFRQWOwEyNjUDJwcXAxc3JwEuASMiBgcVIQMnBxcBHgEzMjY3NSEFFzcnEyMiBhUUFjsBMjY1NCYjBRUeATMyNjchASE1LgEjIgYHATMVIzURMxUjNQFAJhqAGiYmGoAaJgtCJEJGJEIkApEidUcaMRcBQC0kQiT9cyJ1RxoxF/7AAm1CJEKNgBomJhqAGiYmGv6eFzEaR3Ui/sD+RAFAFzEaR3UiAV5AQEBAAcAbJSUbGiYmGgFzQiRC/SQkQiQByzlHCgpsAREkQiT+MTlHCgps70IkQgGLJRsaJiYaGyXAbAoKRzkBAGwKCkc5AV6envzinp4AAgCWAAADagOFAAoAEQAACQIVFxUhNSEBNQcBJzUBFxUDav7w/jzqAcD+qgGAQP580AGE0AJ1ARD+O7XqIUABgLVA/nvQJQGF0CUAAAMAAAAABAADgAAGAA0AEgAAJQkBFQcXFSEJARUXBxUDIwMzEwFA/sABQMDAAYABQP7AwMBAQMBAwIABQAFAgMDAgAFAAUCAwMCAAwD8gAOAAAAAAAQAgABAA4ADQAAUACkALgAzAAABIg4CFRQeAjMyPgI1NC4CIwEUDgIjIi4CNTQ+AjMyHgIVBSMRMxEVIzUzFQIAUItpPDxpi1BQi2k8PGmLUAFAMld1QkJ1VzIyV3VCQnVXMv8AgICAgANAPGmLUFCLaTw8aYtQUItpPP6AQnVXMjJXdUJCdVcyMld1QkABAP8AgEBAAAAAAgC3AHcDSQMJADEAPwAAAQ4BFxYGJyYGBwYiJy4BBwYmNzYmJyY0Nz4BJyY2FxY2NzYyFx4BNzYWBwYWFxYUBzElIgYVFBYzMjY1NCYjMQNJOyEbGh85OVAVFiwWFVA5OR8aGyE7PDw7IRsaHzk5UBUWLBYVUDk5HxobITs8PP63NUtLNTVLSzUBlBVQOTkfGhshOzw8OyEbGh85OVAVFiwWFU86OR8aGyE7PDw7IRsaHzk5UBUWLBasSzU1S0s1NUsAAAIAQAAAA8ADgABYAGUAAAE0JicjLgEnNy4BJy4BJwcuASc1LgEjIgYHFQ4BBycOAQcOAQcXDgEHIw4BFRQWFzMeARcHHgEXHgEXNx4BFxUeATMyNjc1PgE3Fz4BNz4BNyc+ATczPgE1BSImNTQ2MzIWFRQGIwPABANWBxgQPQwaDg8fED0aOR4UKBUVKBQeORo9EB8PDhoMPRAYB1YDBAQDVgcYED0MGg4PHxA9GjkeFCgVFSgUHjkaPRAfDw4aDD0QGAdWAwT+QD1WVj09VlY9AcAVKBQeORo9EB8PDhoMPRAYB1YDBAQDVgcYED0MGg4PHxA9GjkeFCgVFSgUHjkaPRAfDw4aDD0QGAdWAwQEA1YHGBA9DBoODx8QPRo5HhQoFZNWPT1WVj09VgAAAAAKAAD/wAPAA4AABgALABAAFQAaAB8AJAApAC4AOwAAAREhESERIQE1IxUzBxUzNSMBIxUzNREjFTM1ETUjFTMhMzUjFQEzNSMVETM1IxUDMxUzNTM1IzUjFSMVA8D9wP8AA0D+wMDAwMDAAcDAwMDAwMD+QMDA/wDAwMDAwIBAgIBAgAOA/MABAAJA/wDAwEDAwAEAwMD/AMDA/kDAwMDAAQDAwAEAwMD9wICAQICAQAAAAAAIAEAAAAPAA8AABAAJAA4AEwAYAB0AIgAnAAA3ESERIQERIREhATM1IxURMzUjFREzNSMVJSMVMzU9ASMVMxEjFTM1QAEA/wADgP3AAkD+AMDAwMDAwAHAwMDAwMDAAAPA/EADgPzAA0D/AMDA/wDAwP8AwMDAwMBAwMABwMDAAAgAQAAAA8ADwAAEAAkADgATABgAHQAiACcAACURIREhAxEhESEHIxUzNREjFTM1ESMVMzUFMzUjFRM1IxUzAzM1IxUCwAEA/wBA/cACQEDAwMDAwMD+QMDAwMDAwMDAAAPA/EADgPzAA0BAwMD/AMDA/wDAwMDAwAEAwMABAMDAAAAAAAsAQP/AA8ADwAASABcAHAAhACYAKwAwADUAOgA/AEQAAAE1Mxc3MxcVBxcVByMnByM1NycTESERIREVITUhBSERIRETIxUzNREjFTM1ESMVMzUlIREhERMjFTM1ESMVMzURIxUzNQFgJ3h4KAF5eQEoeHgnd3cgAQD/AAEA/wABQAEA/wDAgICAgICA/MABAP8AwICAgICAgALXKXh4ASZ5eSYBeHgpd3f+qf5AAcACQICAQPzAA0D9wMDAAQDAwAEAwMBA/MADQP3AwMABAMDAAQDAwAAAAAgAQAAABAADgAAEAAkADgATABgAHQAiACcAAAEhESERBSERIREXFTM1IyEVMzUjIRUzNSMTNSMVMyUjFTM1BTUjFTMEAPxAA8D8gANA/MBAwMABAMDAAQDAwMDAwP8AwMD/AMDAAoABAP8AQP3AAkBAwMDAwMDA/kDAwMDAwMDAwAAAAAgAQAAABAADgAAEAAkADgATABgAHQAiACcAACUhESERASERIREBNSMVMyE1IxUzITUjFTMDFTM1IysBFTM1IRUzNSMEAPxAA8D8gANA/MABAMDAAQDAwAEAwMDAwMBAwMD+QMDAAAEA/wADgP3AAkD+AMDAwMDAwAHAwMDAwMDAAAAAAAsAAAAABAADgAASABcAHAAhACYAKwAwADUAOgA/AEQAAAEzFQcXFQcjJwcjJzU3JzUzFzcFIREhESEjETMRAxEhESEFNSMVMyE1IxUzITUjFTMTESERIQU1IxUzITUjFTMhNSMVMwMXKXh4ASZ5eSYBeHgpd3f+qf5AAcACQICAQPzAA0D9wMDAAQDAwAEAwMBA/MADQP3AwMABAMDAAQDAwAJgJ3h4KAF5eQEoeHgnd3cg/wABAP8AAQD+wP8AAQDAgICAgICAA0D/AAEAwICAgICAgAAAAAgAQAAAA4ADgAAEAAkADgATABgAHQAiACcAABMRIREhBTMVIzUhMxUjNRMjNTMVISM1MxUhIzUzFTUhESERESM1MxVAA0D8wAFAwMD/AMDAwMDAAQDAwAEAwMD9QALAwMADgPyAA4BAgICAgP0AgICAgICAwAGA/oABwICAAAAACgBAAEADgAOAAAQACQAOABMAGAAdACIAJwAsADEAABMRIREhBRUjNTMRFSM1MwEzFSM1ETMVIzURNTMVIyE1MxUjISM1MxURIzUzFREjNTMVQANA/MACAMDAwMD+QMDAwMDAwAEAwMABwMDAwMDAwAOA/MADQEDAwP8AwMABAMDA/wDAwP5AwMDAwMDAAQDAwAEAwMAAAAAHAEAAQAOAA4AABAAJAA4AEwAYAB0AIgAAASM1MxUVIxUzNRUjFTM1ExEhESEHIREhESURIREhByERIRECQMDAwMDAwID+QAHAQP7AAUABAPzAA0BA/UACwAJAQEBAQECAQEABgP3AAkBA/kABwMD8wANAQP1AAsAAAAAABQBAAEADgAOAAAQACQAOABMAGAAAExEhESEXIREhERkBIREhKQERIRERIREhEUADQPzAQAFA/sABQP7AAsD+wAFA/sABQAOA/MADQED+wAFA/UABQP7AAUD+wAGAAUD+wAAAABUAQABAA4ADgAAEAAkADgATABgAHQAiACcALAAxADYAOwBAAEUASgBPAFQAWQBeAGMAcAAAEyM1MxUVIxUzNRUjFTM1ESMVMzUVIxUzNQEjFTM1FSMVMzURIxUzNRUjFTM1ASMVMzUzIxUzNQEjFTM1MyMVMzUzIxUzNSEjFTM1MyMVMzUzIxUzNQEjFTM1MyMVMzUzIxUzNREhESMRIRUhETMRITWAQEBAQEBAQEBAQAMAQEBAQEBAQED9gEBAgEBA/wBAQIBAQIBAQAEAQECAQECAQED/AEBAgEBAgEBA/oBA/oABgEABgANAQEBAQECAQED/AEBAgEBAAgBAQIBAQP8AQECAQEACgEBAQED9AEBAQEBAQEBAQEBAQAMAQEBAQEBA/oABgP6AQP6AAYBAAAAAGwBAAEADgAOAAAQACQAOABMAGAAdACIAJwAsADEANgA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCGAAABFSE1IQEjFTM1FSM1MxUVIzUzFREjNTMVFSM1MxUBIzUzFRUjNTMVESM1MxUVIzUzFQEjNTMVMyM1MxUzIzUzFRUjNTMVFSM1MxURIzUzFRUjNTMVFSM1MxUlIxUzNRcjNTMVMyM1MxUlIxUzNRcjNTMVMyM1MxUBIxUzNRcjNTMVMyM1MxUDgPzAA0D9AEBAQEBAQEBAQEADAEBAQEBAQEBA/YBAQIBAQIBAQEBAQEBAQEBAQED+gEBAgEBAgEBAAQBAQIBAQIBAQP8AQECAQECAQEACAEBAAYBAQMBAQIBAQP8AQECAQEACAEBAgEBA/wBAQIBAQAKAQEBAQEBAgEBAgEBA/wBAQIBAQIBAQEBAQEBAQEBAQEBAQEBAQEADQEBAQEBAQEAAABsAQABAA4ADgAAEAAkADgATABgAHQAiACcALAAxADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgAAJSMRMxEBNSMVMyM1MxUjIzUzFSMhNTMVIyM1MxUjATUzFSMjNTMVIyE1MxUjIzUzFSMBNTMVIxU1MxUjFTUzFSMjNTMVIyM1MxUjITUzFSMjNTMVIyM1MxUjEzUjFTMHNTMVIxU1MxUjEzUjFTMHNTMVIxU1MxUjATUjFTMHNTMVIxU1MxUjAgBAQAGAQEDAQECAQED/AEBAgEBAAgBAQIBAQP8AQECAQEACgEBAQEBAQIBAQIBAQP8AQECAQECAQEBAQEBAQEBAQEBAQEBAQEBAA0BAQEBAQEBAQANA/MADAEBAQEBAQEBAQED9AEBAQEBAQEBAAoBAQIBAQIBAQEBAQEBAQEBAQEABgEBAgEBAgEBA/wBAQIBAQIBAQAEAQECAQECAQEAAAAALAEAAQAOAA4AABAAJAA4AEwAYAB0AIgAnACwAMQA2AAABIzUzFTcjFTM1MyMVMzU1IxUzNTUjFTM1ESMVMzU1IxUzNTcjFTM1MyMVMzUTESERIQchESERAQBAQIBAQIBAQEBAQEBAQEBAgEBAgEBAgPzAA0BA/UACwAHAQEBAQEBAQIBAQIBAQP4AQECAQECAQEBAQAGA/MADQED9QALAAAAAABsAQABAA4ADgAAEAAkADgATABgAHQAiACcALAAxADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgAAARUhNSEFIxUzNRUjNTMVFSM1MxUVIzUzFRUjNTMVASM1MxUVIzUzFRUjNTMVFSM1MxUBIzUzFTMjNTMVEyM1MxUVIzUzFRUjNTMVFSM1MxUVIzUzFRUjNTMVJSMVMzUXIzUzFTMjNTMVJSMVMzUXIzUzFTMjNTMVASMVMzUXIzUzFRMjNTMVA4D8wANA/QBAQEBAQEBAQEBAAwBAQEBAQEBAQP2AQECAQECAQEBAQEBAQEBAQEBA/oBAQIBAQIBAQAEAQECAQECAQED/AEBAgEBAgEBAA4BAQIBAQMBAQIBAQIBAQIBAQAGAQECAQECAQECAQEABAEBAQEABAEBAgEBAgEBAgEBAgEBAgEBAQEBAQEBAQEBAQEBAQEBAQAHAQEBAQEABAEBAAAAbAEAAQAOAA4AABAAJAA4AEwAYAB0AIgAnACwAMQA2ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAACUjETMRAzUjFTMjNTMVIyM1MxUjIzUzFSMjNTMVIwE1MxUjIzUzFSMjNTMVIyM1MxUjATUzFSMVNTMVIwU1MxUjIzUzFSMjNTMVIyM1MxUjIzUzFSMjNTMVIxM1IxUzBzUzFSMVNTMVIxM1IxUzBzUzFSMVNTMVIwE1IxUzBzUzFSMFNTMVIwOAQECAQEDAQECAQECAQECAQEABgEBAgEBAgEBAgEBAAQBAQEBAAQBAQIBAQIBAQIBAQIBAQIBAQEBAQEBAQEBAQEBAQEBAQEABwEBAQEBAAQBAQEADQPzAAwBAQEBAQEBAQEBA/QBAQEBAQEBAQAKAQECAQECAQEBAQEBAQEBAQEBAAYBAQIBAQIBAQP8AQECAQECAQEABAEBAgEBAgEBAAAAAGwBAAEADgAOAAAQACQAOABMAGAAdACIAJwAsADEANgA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCGAAA3NSEVISUzNSMVNTMVIzU1MxUjNTUzFSM1NTMVIzUBMxUjNTUzFSM1NTMVIzU1MxUjNQEzFSM1IzMVIzUDMxUjNTUzFSM1NTMVIzU1MxUjNTUzFSM1NTMVIzUFMzUjFSczFSM1IzMVIzUFMzUjFSczFSM1IzMVIzUBMzUjFSczFSM1AzMVIzVAA0D8wAMAQEBAQEBAQEBAQP0AQEBAQEBAQEACgEBAgEBAgEBAQEBAQEBAQEBAQAGAQECAQECAQED/AEBAgEBAgEBAAQBAQIBAQIBAQEBAQIBAQMBAQIBAQIBAQIBAQP6AQECAQECAQECAQED/AEBAQED/AEBAgEBAgEBAgEBAgEBAgEBAQEBAQEBAQEBAQEBAQEBAQP5AQEBAQED/AEBAAAAAABsAQABAA4ADgAAEAAkADgATABgAHQAiACcALAAxADYAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgAAEzMRIxETFTM1IzMVIzUzMxUjNTMzFSM1MzMVIzUzARUjNTMzFSM1MzMVIzUzMxUjNTMBFSM1MzUVIzUzJRUjNTMzFSM1MzMVIzUzMxUjNTMzFSM1MzMVIzUzAxUzNSM3FSM1MzUVIzUzAxUzNSM3FSM1MzUVIzUzARUzNSM3FSM1MyUVIzUzQEBAgEBAwEBAgEBAgEBAgEBA/oBAQIBAQIBAQIBAQP8AQEBAQP8AQECAQECAQECAQECAQECAQEBAQEBAQEBAQEBAQEBAQEBA/kBAQEBAQP8AQEADgPzAA0D9AEBAQEBAQEBAQEADAEBAQEBAQEBA/YBAQIBAQIBAQEBAQEBAQEBAQED+gEBAgEBAgEBAAQBAQIBAQIBAQP8AQECAQECAQEAAAAAhAEAAQAOAA4AABAAJAA4AEwAYAB0AIgAnACwAMQA2ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQAAAE1IxUzIzUzFSMjNTMVIyM1MxUjIzUzFSMBNTMVIyM1MxUjIzUzFSMjNTMVIwE1MxUjFTUzFSMFNTMVIyM1MxUjIzUzFSMjNTMVIyM1MxUjIzUzFSMTNSMVMwc1MxUjFTUzFSMTNSMVMwc1MxUjFTUzFSMBNTMVIxM1IxUzBzUzFSMVNTMVIxM1IxUzBzUzFSMVNTMVIwE1IxUzBzUzFSMFNTMVIwMAQEDAQECAQECAQECAQEABgEBAgEBAgEBAgEBAAQBAQEBAAQBAQIBAQIBAQIBAQIBAQIBAQEBAQEBAQEBAQEBAQEBAQEADAEBAQEBAQEBAQEBAQEBAQEBAQP7AQEBAQEABAEBAA0BAQEBAQEBAQEBA/QBAQEBAQEBAQAKAQECAQECAQEBAQEBAQEBAQEBAAYBAQIBAQIBAQP8AQECAQECAQEABgEBAAYBAQIBAQIBAQP8AQECAQECAQEABAEBAgEBAgEBAAAQAwABAA0ADgAAFAAwAWQBpAAABIREhEQETIREhFTMRAy4BJy4BJyIGBy4BJy4BJz4BNTA2Jy4BNScuAQcnMSIGBwYWFwcOAQ8BDgEPAQ4BBw4BBwYWHwEeATMyNjc+ATceATMyNjc+ATc+AScFPgE3PgE3HgEXHgEXDgEHAkD+gAKA/wDA/gABQMARAQQCCB8YEScUChIIFCEKAQEPAwEBAgMMCgcLEAIHDAwECRYKAgsTCQwBFgQfJwQBAwUMBAgEFjYjKVopH0UYBQcDBQcDBAMB/s4ECQQLDwUKGg4CBAIeNRcDgPzAAkABAP0AAsDA/gABEwMIAwcIAQMDBg0HFTggAwUDZhkDAwMDCA4BAQsJHFQ2CxkxFgQXJxEHAQ0CFSwSBg0DBwICP0QPFwcTGQEBAQYECBQLCQkRCRckDxUiDgIDAgcQCgAABABGAIADwALcAAgAEwAcACcAAAEHIxMzEyMnIzcnLgEnIw4BDwEzBQcjEzMTIycjNycuAScjDgEPATMCVj9Rz13OU0HWxzwKDwcBBw4KO7f9gicygDqANCiFfCUHCQQBBAkGJXIBPr4CXP2kvj2uHjYaGjgbr4V2AXf+iXYmbBIiEBAjEWwAAAEBAACAAwADAAAIAAABIzUhFSMRIxEBwMACAMCAAoCAgP4AAgAAAAAIAEAAQAOAA4AABAAJAA4AEwAYAB0AIgAnAAATESERIQUzFSM1ITMVIzUTIzUzFSEjNTMVISM1MxURITUhFREjNTMVQANA/MABQMDA/wDAwMDAwAEAwMABAMDA/UACwMDAA4D8wANAQMDAwMD9QMDAwMDAwAEAwMABAMDAAAAAAAgAQABAA4ADgAAEAAkADgATABgAHQAiACcAADchESEREzUzFSMRNTMVIyUVIzUzERUjNTMRFSM1MyERIxEzIRUjNTNAA0D8wEDAwMDAAsDAwMDAwMD/AMDA/wDAwEADQPzAAUDAwP8AwMDAwMABAMDAAQDAwP1AAsDAwAAGAEAAAAPAA4AABAAJAA4AEwAYACEAAAEVITUhAREhESEHIREhEQchFSE1FTUhFSEBITUhESE1ITUDwP0AAwD/AP2AAoBA/gACAED+gAGA/oABgP5AAkD9gAKA/cADAEBA/sD+QAHAQP7AAUBAQEDAQEACwED+wEDAAAAAAwEsADQC1ANMAEYAVABiAAAlNS4BJy4BJy4BJzceARceARc1LgEnLgEnLgE1NDY3PgE3NTMVHgEXHgEXBy4BJy4BJxUeARceARceARceARUUBgcOAQcVIxEOAQcOARUUFhceARc1Ez4BNz4BNTQmJy4BJxUB6x4wEhMfDg0QAk8FEAsRKBcYMhkTHQoKCx4eFDsnLiM2FBofBlIDDwsLHhQeKAkTHQwMEgYGBhoaGkMqLhckDQ4NCwwLJhsuFyYPDw8KCwsqIDROBA0KCR8VFjMfDyAuDxUYAvsEEw4LHRITKhgqRBoRFgQlJQQUEBY7JQwXIw0MEATjBwwECBQLDBsQECMTKEUbGx4CTwKxAxMPDiQUFCINDhYI2v3gAxQRESoZFiINDRcL8AAABQChAHwDXwMDAAwAGQAeACsAOAAAARQGIyImJzQ2MzIWFQcGFjMyNjU0JiMiBhUTATMBIyUUBiMiJic0NjMyFhUHBhYzMjY1NCYjDgEVAchYPTtWAVk/QU7lASsoKiclLScqSQFwNv6QNgIzWD07VgFYQEFO5QErKConJS0nKgJJYmNeXl1mYVkFPFFQPTpSUjr+OAKH/XnKY2JeXl5lYVkGO1FQPjlTAVI7AAsAQABAA4ADgAAEAAgADQASABYAGwAgACcALAAxADYAABMRIREhBRUnMwcXFSc1ERcVJzURNRcjISM1MxURIzUzFQM5ATUzFSMBIzUzFREjNTMVESM1MxVAA0D8wAEAgIDAwMDAwICAAcDAwMDAwMDAAcDAwMDAwMADgPzAA0BAgIBAwIDAgP8AwIDAgP6AgIDAwAEAwMABAMDA/gDAwAEAwMABAMDAAAsAQABAA4ADgAAEAAgADQASABYAGwAgACUAKgAvADQAADchESERExcjNTcXIyczIRcjJzMFJzMVAzUzFSMhNTMVIysBNTMVATUzFSMhNTMVIyE1MxUjQANA/MBAgIDAwIDAgAEAwIDAgAEAgIDAwMD/AMDAQMDAAUDAwP8AwMD/AMDAQANA/MACwICAQMDAwMCAgID+wMDAwMDAwP8AwMDAwMDAAAAAAAsAQABAA4ADgAAEAAkADgATABgAHAAhACYAKwAwADQAABMRIREhBRcjJzMhFyMnMwcXFSc1ERcVJzURNRcjISM1MxURIzUzFQEjNTMVESM1MxUDMxUnQANA/MACAMCAwID/AMCAwIDAwMDAwICAAcDAwMDAAQDAwMDAgICAA4D8wANAQMDAwMBAwIDAgP8AwIDAgP6AgIDAwAEAwMD/AMDAAQDAwAHAgIAAAAADAB0AuQPjAoEADgBGAJUAADcjEQ4BBzU+ATc+ATczESUVIT4BNz4BNz4BNz4BNTQmJy4BIyIGBw4BByc+ATc+ATMyFhceARUUBgcOAQcOAQcOAQcOAQczPwEeARceATMyNjc+ATU0JicuASMiBgc3FjY3PgE1NCYnLgEjIgYHDgEHJz4BNz4BNz4BMzIWFx4BFRQGBx4BFx4BFRQGBw4BIyImJy4BJ+FWFzcgECUUExsIRQGD/tMDDgwNMCQdIwcJCQgIBxYNDhUICAkBVgQYFBQzHiE0ExMTBgUFEgsIHBQVGQYFCQOqVlMCCwgJFQ0NFgkJCQgJCRUMCRMMChEbCQkJBwYHEgsLEwgHCgFQBQwICRcPDyESIDMTDxAgIBMfCwwLFRYVNiAeMxQUFwPAAUMWIAtOBhUPDyQU/j9QUBcrFBQ2IRslCQ4aDQ4WCAgHCAgIGxMJIzMQDw8REhItGg8dDg0dDwocExIZBgYMBicKEBgJCAgKCgobERAaCQoJAwNGAQgICBUNDBIHBgcIBwgWDw0VIAwMFAcGBxQUECYUHi8RBBMODyIVHTIVFRQRERIuHAAAAAQAWQBAAyADQAAQAB0ANgA/AAABBy4BMTAOAhUUFhcHFwEnATQ+AjEwFhcBLgE1JR4BFRQOAiMiJic3HgEzMj4CNTQmJzcHFAYjNTI2NTMC83U6ZFpsWg0MgC4CmS3+DUZURkkq/rcFBQHAHCQtTmk8OGInLh1LKy5SPSMZEyxgXkIoOEADB3VMYleKq1QfORuALQKaLf5ZSI1vRUg6/rcQIRHMMWgzPGlOLSkiLhseIz1SLilRJiysQl5AOCgAAAIAgACAA8ADAAAFAAwAAAERIREhAQEhESM1IREDwPzAAkABAP0AAsDA/gACAP6AAoD/AP7AAUDA/gAAAAEAQACAA4ADQAALAAATFSERIREhNSERIRHAAoD9QAGA/kADQALAQP5AAkBA/UACQAAAAAABAEAAgAQAA0AADQAAAQMzEyEDIREhNSERIRMBLm5AWwJTbv1AAYD+QAMukgKA/oABQP6AAkBA/UACAAABAAAAAQAAOQQud18PPPUACwQAAAAAANKQOx0AAAAA0pA7HQAA/8AEAAPAAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAQAAAEAAAAAAAAAAAAAAAAAAAChBAAAAAAAAAAAAAAAAgAAAAQAASIEAAFABAABIgQAAUAEAAEABAABQAQAAQAEAAEABAABQAQAAcAEAAFABAABgAQAAQAEAAGABAABAAQAAYAEAAFABAABQAQAAUAEAAFABAABAAQAAQAEAAEABAABAAQAAMAEAAFABAAAwAQAAYAEAABABAABAAQAAKQEAACABAAAgAQAAMAEAAFABAAAwAQAAUAEAADABAAAwAQAAMEEAABUBAAAgAQAAMAEAADABAABAAQAAMAEAACABAAAgAQAAEAEAABABAAAQAQAAAAEAAAABAAAAAQAAAAEAABABAABAAQAAMAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAACABAAAQAQAAEAEAAHABAAAgAQAAUAEAACABAAAgAQAAIAEAACABAABQAQAAMAEAAC1BAAAQAQAAEAEAABABAAAAAQAAEAEAACABAAAwAQAAQAEAADABAAAwAQAAEAEAAEABAAAcQQAAIAEAACABAAAwAQAAMAEAACaBAAAgAQAAIAEAACABAAAgAQAAIAEAABUBAAAgAQAAIAEAACABAAAgAQAAIAEAAAABAAAAAQAAAAEAACABAAAdwQAAIAEAACABAAAgAQAAAAEAABABAAAlgQAAAAEAACABAAAtwQAAEAEAAAABAAAQAQAAEAEAABABAAAQAQAAEAEAAAABAAAQAQAAEAEAABABAAAQAQAAEAEAABABAAAQAQAAEAEAABABAAAQAQAAEAEAABABAAAQAQAAMAEAABGBAABAAQAAEAEAABABAAAQAQAASwEAAChBAAAQAQAAEAEAABABAAAHQQAAFkEAACABAAAQAQAAEAAAAAAAAoAFAAeAC4APgBOAF4AdgCOAKYAvgDMANoA6AD2AQQBFAEiATABPgFMAVoBaAF2AYQBkgGgAbIBxAHYAewCMAJSAmgCsgLkAv4DFAMiAzIDSANuA6oEAAQkBD4ETARsBIwEtAT6BUYFoAXyBiQGVAaABsIG9gc8B1oHhggWCMIJBAksCVAJcAmOCawJvAnKCeAKDAo2ClQKhAqcCr4K4AsACx4LRAtoC8wL9gweDHgMugzoDZANtg7oD0gPqA/uEAwQmBEmEVoRjhHCEfYSShJoEoYSpBLgExwTQBNkE4gT2BTKFO4VEBU2FZIWIhZIFnIWvhcgF7gYEhhSGJQZABlCGYQZ8BowGnwauhrsG4YcPBzyHUQd+h6wH2YgHCD4IZ4h4iH2IjYidCKyI0gjniPyJEYknCV4Jdgl9iYQJi4AAQAAAKEA1gAhAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAA0AAAABAAAAAAACAAcAlgABAAAAAAADAA0ASAABAAAAAAAEAA0AqwABAAAAAAAFAAsAJwABAAAAAAAGAA0AbwABAAAAAAAKABoA0gADAAEECQABABoADQADAAEECQACAA4AnQADAAEECQADABoAVQADAAEECQAEABoAuAADAAEECQAFABYAMgADAAEECQAGABoAfAADAAEECQAKADQA7EtlbmRvVUlHbHlwaHMASwBlAG4AZABvAFUASQBHAGwAeQBwAGgAc1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMEtlbmRvVUlHbHlwaHMASwBlAG4AZABvAFUASQBHAGwAeQBwAGgAc0tlbmRvVUlHbHlwaHMASwBlAG4AZABvAFUASQBHAGwAeQBwAGgAc1JlZ3VsYXIAUgBlAGcAdQBsAGEAcktlbmRvVUlHbHlwaHMASwBlAG4AZABvAFUASQBHAGwAeQBwAGgAc0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=') diff --git a/src/icons/main.scss b/src/icons/main.scss index a7785c8..fddf9ab 100644 --- a/src/icons/main.scss +++ b/src/icons/main.scss @@ -1,4 +1,4 @@ -@import '../mixins/import-once'; +@import '../mixins/all'; @import './font/KendoUIGlyphs'; $icon-size: 16px !default; diff --git a/src/mixins/_all.scss b/src/mixins/_all.scss index 17acc5c..d440b61 100644 --- a/src/mixins/_all.scss +++ b/src/mixins/_all.scss @@ -1,12 +1,13 @@ // Core -@import "import-once"; -@import "placeholder-selectors"; +@import "core/import-once"; +@import "core/placeholder-selectors"; +@import "core/data-uri"; // Utils -@import "utils/all"; -@import "decoration"; -@import "compact"; +@import "utils/decoration"; +@import "utils/compact"; +@import "utils/blend-modes"; // Appearance diff --git a/src/mixins/_blend-modes.scss b/src/mixins/_blend-modes.scss deleted file mode 100644 index b203c91..0000000 --- a/src/mixins/_blend-modes.scss +++ /dev/null @@ -1,533 +0,0 @@ -@import '../mixins/import-once'; - - // SCSS blend modes, https://github.k-com/heygrady/scss-blend-modes - - // Import the Compass Plugin - //-------------------------------- - // Normal - //-------------------------------- - @function blend-normal ($foreground, $background) { - $opacity: opacity($foreground); - $background-opacity: opacity($background); - - // calculate opacity - $bm-red: red($foreground) * $opacity + red($background) * $background-opacity * (1 - $opacity); - $bm-green: green($foreground) * $opacity + green($background) * $background-opacity * (1 - $opacity); - $bm-blue: blue($foreground) * $opacity + blue($background) * $background-opacity * (1 - $opacity); - @return rgb($bm-red, $bm-green, $bm-blue); - } - - //-------------------------------- - // Multiply - //-------------------------------- - @function blend-multiply ($foreground, $background) { - $bm-red: red($background) * red($foreground) / 255; - $bm-green: green($background) * green($foreground) / 255; - $bm-blue: blue($background) * blue($foreground) / 255; - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - - //-------------------------------- - // Lighten - //-------------------------------- - @function blend-lighten ($foreground, $background) { - $bm-red: blend-lighten-color(red($foreground), red($background)); - $bm-green: blend-lighten-color(green($foreground), green($background)); - $bm-blue: blend-lighten-color(blue($foreground), blue($background)); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - @function blend-lighten-color($foreground, $background) { - @if $background > $foreground { - $foreground: $background; - } - @return $foreground; - } - - //-------------------------------- - // Darken - //-------------------------------- - @function blend-darken ($foreground, $background) { - $bm-red: blend-darken-color(red($foreground), red($background)); - $bm-green: blend-darken-color(green($foreground), green($background)); - $bm-blue: blend-darken-color(blue($foreground), blue($background)); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - @function blend-darken-color($foreground, $background) { - @if $background < $foreground { - $foreground: $background; - } - @return $foreground; - } - - //-------------------------------- - // Darker Color - //-------------------------------- - @function blend-darkercolor ($foreground, $background) { - $bm-red: red($foreground); - $bm-green: green($foreground); - $bm-blue: blue($foreground); - $background-red: red($background); - $background-green: green($background); - $background-blue: blue($background); - - @if $background-red * 0.3 + $background-green * 0.59 + $background-blue * 0.11 <= $bm-red * 0.3 + $bm-green * 0.59 + $bm-blue * 0.11 { - $bm-red: $background-red; - $bm-green: $background-green; - $bm-blue: $background-blue; - } - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - - //-------------------------------- - // Lighter Color - //-------------------------------- - @function blend-lightercolor ($foreground, $background) { - $bm-red: red($foreground); - $bm-green: green($foreground); - $bm-blue: blue($foreground); - $background-red: red($background); - $background-green: green($background); - $background-blue: blue($background); - - @if $background-red * 0.3 + $background-green * 0.59 + $background-blue * 0.11 > $bm-red * 0.3 + $bm-green * 0.59 + $bm-blue * 0.11 { - $bm-red: $background-red; - $bm-green: $background-green; - $bm-blue: $background-blue; - } - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - - //-------------------------------- - // Linear Dodge - //-------------------------------- - @function blend-lineardodge ($foreground, $background) { - $bm-red: blend-lineardodge-color(red($foreground), red($background)); - $bm-green: blend-lineardodge-color(green($foreground), green($background)); - $bm-blue: blend-lineardodge-color(blue($foreground), blue($background)); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - @function blend-lineardodge-color($foreground, $background) { - @if $background + $foreground > 255 { - $foreground: 255; - } - @else { - $foreground: $background + $foreground; - } - @return $foreground; - } - - //-------------------------------- - // Linear Burn - //-------------------------------- - @function blend-linearburn ($foreground, $background) { - $bm-red: blend-linearburn-color(red($foreground), red($background)); - $bm-green: blend-linearburn-color(green($foreground), green($background)); - $bm-blue: blend-linearburn-color(blue($foreground), blue($background)); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - @function blend-linearburn-color($foreground, $background) { - @if $background + $foreground < 255 { - $foreground: 0; - } - @else { - $foreground: $background + $foreground - 255; - } - @return $foreground; - } - - //-------------------------------- - // Difference - //-------------------------------- - @function blend-difference ($foreground, $background) { - $bm-red: abs(red($background) - red($foreground)); - $bm-green: abs(green($background) - green($foreground)); - $bm-blue: abs(blue($background) - blue($foreground)); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - - //-------------------------------- - // Screen - //-------------------------------- - @function blend-screen ($foreground, $background) { - $bm-red: blend-screen-color(red($foreground), red($background)); - $bm-green: blend-screen-color(green($foreground), green($background)); - $bm-blue: blend-screen-color(blue($foreground), blue($background)); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - @function blend-screen-color($foreground, $background) { - @return (255 - ( ( (255 - $foreground) * (255 - $background)) / 256)); - } - - //-------------------------------- - // Exclusion - //-------------------------------- - @function blend-exclusion ($foreground, $background) { - $bm-red: blend-exclusion-color(red($foreground), red($background)); - $bm-green: blend-exclusion-color(green($foreground), green($background)); - $bm-blue: blend-exclusion-color(blue($foreground), blue($background)); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - @function blend-exclusion-color($foreground, $background) { - @return $background - ($background * (2 / 255) - 1) * $foreground; - } - - //-------------------------------- - // Overlay - //-------------------------------- - @function blend-overlay ($foreground, $background) { - $bm-red: blend-overlay-color(red($foreground), red($background)); - $bm-green: blend-overlay-color(green($foreground), green($background)); - $bm-blue: blend-overlay-color(blue($foreground), blue($background)); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - @function blend-overlay-color($foreground, $background) { - @if $background <= 255 / 2 { - $foreground: (2 * $background * $foreground) / 255; - } @else { - $foreground: 255 - (255 - 2 * ($background - (255 / 2))) * (255 - $foreground) / 255; - } - @return $foreground; - } - - //-------------------------------- - // Soft Light - //-------------------------------- - @function blend-softlight ($foreground, $background) { - $bm-red: blend-softlight-color(red($foreground), red($background)); - $bm-green: blend-softlight-color(green($foreground), green($background)); - $bm-blue: blend-softlight-color(blue($foreground), blue($background)); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - @function blend-softlight-color($foreground, $background) { - @if $background < 128 { - $foreground: (($foreground / 2) + 64) * $background * (2 / 255); - } @else { - $foreground: 255 - (191 - ($foreground / 2)) * (255 - $background) * (2 / 255); - } - @return $foreground; - } - - //-------------------------------- - // Hard Light - //-------------------------------- - @function blend-hardlight ($foreground, $background) { - $bm-red: blend-hardlight-color(red($foreground), red($background)); - $bm-green: blend-hardlight-color(green($foreground), green($background)); - $bm-blue: blend-hardlight-color(blue($foreground), blue($background)); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - @function blend-hardlight-color($foreground, $background) { - $tmp-blend: $foreground; - @if $tmp-blend < 128 { - $foreground: $background * $tmp-blend * (2 / 255); - } @else { - $foreground: 255 - (255-$background) * (255-$tmp-blend) * (2 / 255); - } - @return $foreground; - } - - //-------------------------------- - // Color Dodge - //-------------------------------- - @function blend-colordodge ($foreground, $background) { - $bm-red: blend-colordodge-color(red($foreground), red($background)); - $bm-green: blend-colordodge-color(green($foreground), green($background)); - $bm-blue: blend-colordodge-color(blue($foreground), blue($background)); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - @function blend-colordodge-color($foreground, $background) { - $tmp: $background * 256 / (255 - $foreground); - @if $tmp > 255 or $foreground == 255 { - $foreground: 255; - } @else { - $foreground: $tmp; - } - @return $foreground; - } - - //-------------------------------- - // Color Burn - //-------------------------------- - @function blend-colorburn ($foreground, $background) { - $bm-red: blend-colorburn-color(red($foreground), red($background)); - $bm-green: blend-colorburn-color(green($foreground), green($background)); - $bm-blue: blend-colorburn-color(blue($foreground), blue($background)); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - @function blend-colorburn-color($foreground, $background) { - $tmp: (255 - ((255 - $background) * 255) / $foreground); - - // TODO: hacked to replicate photoshop - @if $foreground == 0 { - $foreground: 255; - } @elseif $tmp < 0 { - $foreground: 0; - } @else { - $foreground: $tmp; - } - @return $foreground; - } - - //-------------------------------- - // Linear Light - //-------------------------------- - @function blend-linearlight ($foreground, $background) { - $bm-red: blend-linearlight-color(red($foreground), red($background)); - $bm-green: blend-linearlight-color(green($foreground), green($background)); - $bm-blue: blend-linearlight-color(blue($foreground), blue($background)); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - @function blend-linearlight-color($foreground, $background) { - @if $foreground < 128 { - $foreground: blend-linearburn-color($background, 2 * $foreground); - } @else { - $foreground: blend-lineardodge-color($background, 2 * ($foreground - 128)); - } - @return $foreground; - } - - //-------------------------------- - // Vivid Light - //-------------------------------- - @function blend-vividlight ($foreground, $background) { - $bm-red: blend-vividlight-color(red($foreground), red($background)); - $bm-green: blend-vividlight-color(green($foreground), green($background)); - $bm-blue: blend-vividlight-color(blue($foreground), blue($background)); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - - @function blend-vividlight-color($foreground, $background) { - @if $foreground < 128 { - $foreground: blend-colorburn-color(2 * $foreground, $background); - } @else { - $foreground: blend-colordodge-color(2 * ($foreground - 128), $background); - } - @return $foreground; - } - - //-------------------------------- - // Pin Light - //-------------------------------- - @function blend-pinlight ($foreground, $background) { - $bm-red: blend-pinlight-color(red($foreground), red($background)); - $bm-green: blend-pinlight-color(green($foreground), green($background)); - $bm-blue: blend-pinlight-color(blue($foreground), blue($background)); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - - @function blend-pinlight-color($foreground, $background) { - @if $foreground < 128 { - $foreground: blend-darken-color($background, 2 * $foreground); - } @else { - $foreground: blend-lighten-color($background, 2 * ($foreground - 128)); - } - @return $foreground; - } - - //-------------------------------- - // Hard Mix - //-------------------------------- - @function blend-hardmix ($foreground, $background) { - $bm-red: blend-hardmix-color(red($foreground), red($background)); - $bm-green: blend-hardmix-color(green($foreground), green($background)); - $bm-blue: blend-hardmix-color(blue($foreground), blue($background)); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - - @function blend-hardmix-color($foreground, $background) { - $tmp: blend-vividlight-color($foreground, $background); - @if $tmp < 128 { - $foreground: 0; - } @else { - $foreground: 255; - } - @return $foreground; - } - - - // Unique to Photoshop - - //-------------------------------- - // Color Blend - //-------------------------------- - @function blend-colorblend ($foreground, $background) { - $foreground-hsv: color-to-hsv($foreground); - $background-hsv: color-to-hsv($background); - - $bm-hsv: nth($foreground-hsv, 1), nth($foreground-hsv, 2), nth($background-hsv, 3); - $bm-color: hsv-to-color($bm-hsv); - - @return blend-normal(rgba(red($bm-color), green($bm-color), blue($bm-color), opacity($foreground)), $background); - } - - //-------------------------------- - // Dissolve - //-------------------------------- - @function blend-dissolve ($foreground, $background) { - // The Dissolve blend mode acts on transparent and partially transparent pixels - // it treats transparency as a pixel pattern and applies a diffusion dither pattern. - // @see http://photoblogstop.k-com/photoshop/photoshop-blend-modes-explained - @return $foreground; - } - - //-------------------------------- - // Divide - //-------------------------------- - @function blend-divide ($foreground, $background) { - $bm-red: blend-divide-colors(red($foreground), red($background)); - $bm-green: blend-divide-colors(green($foreground), green($background)); - $bm-blue:blend-divide-colors(blue($foreground), blue($background)); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - @function blend-divide-colors($foreground, $background) { - @return min((($background / 255) / ($foreground / 255)) * 255, 255); - } - - //-------------------------------- - // Hue - //-------------------------------- - @function blend-hue ($foreground, $background) { - $foreground-hsv: color-to-hsv($foreground); - $background-hsv: color-to-hsv($background); - - $bm-hsv: nth($foreground-hsv, 1), nth($background-hsv, 2), nth($background-hsv, 3); - $bm-color: hsv-to-color($bm-hsv); - - @return blend-normal(rgba(red($bm-color), green($bm-color), blue($bm-color), opacity($foreground)), $background); - } - - //-------------------------------- - // Luminosity - //-------------------------------- - @function blend-luminosity ($foreground, $background) { - $foreground-hsv: color-to-hsv($foreground); - $background-hsv: color-to-hsv($background); - - $bm-hsv: nth($background-hsv, 1), nth($background-hsv, 2), nth($foreground-hsv, 3); - $bm-color: hsv-to-color($bm-hsv); - - @return blend-normal(rgba(red($bm-color), green($bm-color), blue($bm-color), opacity($foreground)), $background); - } - - //-------------------------------- - // Saturation - //-------------------------------- - @function blend-saturation ($foreground, $background) { - $foreground-hsv: color-to-hsv($foreground); - $background-hsv: color-to-hsv($background); - - $bm-hsv: nth($background-hsv, 1), nth($foreground-hsv, 2), nth($background-hsv, 3); - $bm-color: hsv-to-color($bm-hsv); - - @return blend-normal(rgba(red($bm-color), green($bm-color), blue($bm-color), opacity($foreground)), $background); - } - - //-------------------------------- - // Subtract - //-------------------------------- - @function blend-subtract ($foreground, $background) { - $bm-red: max(red($background) - red($foreground), 0); - $bm-green: max(green($background) - green($foreground), 0); - $bm-blue: max(blue($background) - blue($foreground), 0); - - @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); - } - - //-------------------------------- - // HSL and HSV - //-------------------------------- - // @see https://gist.k-github.k-com/1069204 - @function hsv-to-hsl($h, $s: 0, $v: 0) { - @if type-of($h) == 'list' { - $v: nth($h, 3); - $s: nth($h, 2); - $h: nth($h, 1); - } - - @if unit($h) == 'deg' { - $h: 3.1415 * 2 * ($h / 360deg); - } - @if unit($s) == '%' { - $s: 0 + ($s / 100%); - } - @if unit($v) == '%' { - $v: 0 + ($v / 100%); - } - - $ss: $s * $v; - $ll: (2 - $s) * $v; - - @if $ll <= 1 and $ll != 0 { - $ss: $ss / $ll; - } @else if ($ll == 2) { - $ss: 0; - } @else { - $ss: $ss / (2 - $ll); - } - - $ll: $ll / 2; - - @return 360deg * $h / (3.1415 * 2), percentage(max(0, min(1, $ss))), percentage(max(0, min(1, $ll))); - } - - @function hsl-to-hsv($h, $ss: 0, $ll: 0) { - @if type-of($h) == 'list' { - $ll: nth($h, 3); - $ss: nth($h, 2); - $h: nth($h, 1); - } @else if type-of($h) == 'color' { - $ll: lightness($h); - $ss: saturation($h); - $h: hue($h); - } - - @if unit($h) == 'deg' { - $h: 3.1415 * 2 * ($h / 360deg); - } - @if unit($ss) == '%' { - $ss: 0 + ($ss / 100%); - } - @if unit($ll) == '%' { - $ll: 0 + ($ll / 100%); - } - - $ll: $ll * 2; - - @if $ll <= 1 { - $ss: $ss * $ll; - } @else { - $ss: $ss * (2 - $ll); - } - - $v: ($ll + $ss) / 2; - $s: if($ll + $ss == 0, 0, (2 * $ss) / ($ll + $ss)); - - @return 360deg * $h / (3.1415 * 2), percentage(max(0, min(1, $s))), percentage(max(0, min(1, $v))); - } - - @function color-to-hsv($color) { - @return hsl-to-hsv($color); - } - - @function hsv-to-color($h, $s: 0, $v: 0) { - $hsl: hsv-to-hsl($h, $s, $v); - @return hsl(nth($hsl, 1), nth($hsl, 2), nth($hsl, 3)); - } diff --git a/src/mixins/appearance/_all.scss b/src/mixins/appearance/_all.scss index cdd095b..9a449a6 100644 --- a/src/mixins/appearance/_all.scss +++ b/src/mixins/appearance/_all.scss @@ -24,9 +24,6 @@ @if ( $what == selected-header ) { @include appearance_selected-header; } - @if ( $what == disabled-header ) { - @include appearance_disabled-header; - } // Button @@ -36,11 +33,8 @@ @if ( $what == hovered-button ) { @include appearance_hovered-button; } - @if ( $what == active-button ) { - @include appearance_active-button; - } - @if ( $what == disabled-button ) { - @include appearance_disabled-button; + @if ( $what == pressed-button ) { + @include appearance_pressed-button; } @@ -51,11 +45,8 @@ @if ( $what == hovered-primary-button ) { @include appearance_hovered-primary-button; } - @if ( $what == active-primary-button ) { - @include appearance_active-primary-button; - } - @if ( $what == disabled-primary-button ) { - @include appearance_disabled-primary-button; + @if ( $what == pressed-primary-button ) { + @include appearance_pressed-primary-button; } @@ -69,9 +60,6 @@ @if ( $what == focused-input ) { @include appearance_focused-input; } - @if ( $what == disabled-input ) { - @include appearance_disabled-input; - } // Node @@ -84,9 +72,6 @@ @if ( $what == selected-node ) { @include appearance_selected-node; } - @if ( $what == disabled-node ) { - @include appearance_disabled-node; - } // List item @@ -99,8 +84,5 @@ @if ( $what == selected-list-item ) { @include appearance_selected-list-item; } - @if ( $what == disabled-list-item ) { - @include appearance_disabled-list-item; - } } \ No newline at end of file diff --git a/src/mixins/appearance/_button.scss b/src/mixins/appearance/_button.scss index 2c85949..5431393 100644 --- a/src/mixins/appearance/_button.scss +++ b/src/mixins/appearance/_button.scss @@ -3,53 +3,41 @@ $_button-imported: false !default; @if ( $_button-imported == false ) { %appearance_button { - // color: $button-color; + // color: $button-text; // background-color: $button-bg; // border-color: $button-border; // @include linear-gradient( $button-gradient ); } %appearance_hovered-button { - // color: $button-hovered-color; + // color: $button-hovered-text; // background-color: $button-hovered-bg; // border-color: $button-hovered-border; // @include linear-gradient( $button-hovered-gradient ); } - %appearance_active-button { - // color: $button-active-color; - // background-color: $button-active-bg; - // border-color: $button-active-border; - // @include linear-gradient( $button-active-gradient ); - } - %appearance_disabled-button { - // color: $button-disabled-color; - // background-color: $button-disabled-bg; - // border-color: $button-disabled-border; - // @include linear-gradient( $button-disabled-gradient ); + %appearance_pressed-button { + // color: $button-pressed-text; + // background-color: $button-pressed-bg; + // border-color: $button-pressed-border; + // @include linear-gradient( $button-pressed-gradient ); } %appearance_primary-button { - // color: $primary-button-color; + // color: $primary-button-text; // background-color: $primary-button-bg; // border-color: $primary-button-border; // @include linear-gradient( $primary-button-gradient ); } %appearance_hovered-primary-button { - // color: $primary-button-hovered-color; + // color: $primary-button-hovered-text; // background-color: $primary-button-hovered-bg; // border-color: $primary-button-hovered-border; // @include linear-gradient( $primary-button-hovered-gradient ); } - %appearance_active-primary-button { - // color: $primary-button-active-color; - // background-color: $primary-button-active-bg; - // border-color: $primary-button-active-border; - // @include linear-gradient( $primary-button-active-gradient ); - } - %appearance_disabled-primary-button { - // color: $primary-button-disabled-color; - // background-color: $primary-button-disabled-bg; - // border-color: $primary-button-disabled-border; - // @include linear-gradient( $primary-button-disabled-gradient ); + %appearance_pressed-primary-button { + // color: $primary-button-pressed-text; + // background-color: $primary-button-pressed-bg; + // border-color: $primary-button-pressed-border; + // @include linear-gradient( $primary-button-pressed-gradient ); } $_button-imported: true; @@ -59,10 +47,8 @@ $_button-imported: false !default; @mixin appearance_button { @extend %appearance_button }; @mixin appearance_hovered-button { @extend %appearance_hovered-button }; -@mixin appearance_active-button { @extend %appearance_active-button }; -@mixin appearance_disabled-button { @extend %appearance_disabled-button }; +@mixin appearance_pressed-button { @extend %appearance_pressed-button }; @mixin appearance_primary-button { @extend %appearance_primary-button }; @mixin appearance_hovered-primary-button { @extend %appearance_hovered-primary-button }; -@mixin appearance_active-primary-button { @extend %appearance_active-primary-button }; -@mixin appearance_disabled-primary-button { @extend %appearance_disabled-primary-button }; \ No newline at end of file +@mixin appearance_pressed-primary-button { @extend %appearance_pressed-primary-button }; \ No newline at end of file diff --git a/src/mixins/appearance/_input.scss b/src/mixins/appearance/_input.scss index bde6264..8151b67 100644 --- a/src/mixins/appearance/_input.scss +++ b/src/mixins/appearance/_input.scss @@ -17,11 +17,6 @@ $_input-imported: false !default; // background-color: $input-active-bg; // border-color: $input-active-border; } - %appearance_disabled-input { - // color: $input-disabled-color; - // background-color: $input-disabled-bg; - // border-color: $input-disabled-border; - } $_input-imported: true; @@ -30,5 +25,4 @@ $_input-imported: false !default; @mixin appearance_input { @extend %appearance_input; } @mixin appearance_hovered-input { @extend %appearance_hovered-input; } -@mixin appearance_focused-input { @extend %appearance_focused-input; } -@mixin appearance_disabled-input { @extend %appearance_disabled-input; } \ No newline at end of file +@mixin appearance_focused-input { @extend %appearance_focused-input; } \ No newline at end of file diff --git a/src/mixins/appearance/_node.scss b/src/mixins/appearance/_node.scss index 26947e9..e7605b6 100644 --- a/src/mixins/appearance/_node.scss +++ b/src/mixins/appearance/_node.scss @@ -20,12 +20,6 @@ $_node-imported: false !default; // border-color: $node-selected-border; // @include linear-gradient( $node-selected-gradient ); } - %appearance_disabled-node { - // color: $node-disabled-color; - // background-color: $node-disabled-bg; - // border-color: $node-disabled-border; - // @include linear-gradient( $node-disabled-gradient ); - } %appearance_list-item { // color: $list-item-color; @@ -39,10 +33,6 @@ $_node-imported: false !default; // color: $list-item-selected-color; // background-color: $list-item-selected-bg; } - %appearance_disabled-list-item { - // color: $list-item-disabled-color; - // background-color: $list-item-disabled-bg; - } $_node-imported: true; @@ -52,9 +42,7 @@ $_node-imported: false !default; @mixin appearance_node { @extend %appearance_node }; @mixin appearance_hovered-node { @extend %appearance_hovered-node }; @mixin appearance_selected-node { @extend %appearance_selected-node }; -@mixin appearance_disabled-node { @extend %appearance_disabled-node }; @mixin appearance_list-item { @extend %appearance_list-item }; @mixin appearance_hovered-list-item { @extend %appearance_hovered-list-item }; -@mixin appearance_selected-list-item { @extend %appearance_selected-list-item }; -@mixin appearance_disabled-list-item { @extend %appearance_disabled-list-item }; \ No newline at end of file +@mixin appearance_selected-list-item { @extend %appearance_selected-list-item }; \ No newline at end of file diff --git a/src/mixins/appearance/_panel.scss b/src/mixins/appearance/_panel.scss index 3cd9873..6a15d75 100644 --- a/src/mixins/appearance/_panel.scss +++ b/src/mixins/appearance/_panel.scss @@ -31,12 +31,6 @@ $_panel-imported: false !default; // border-color: $header-selected-border; // @include linear-gradient( $header-selected-gradient ); } - %appearance_disabled-header { - // color: $header-disabled-color; - // background-color: $header-disabled-bg; - // border-color: $header-disabled-border; - // @include linear-gradient( $header-disabled-gradient ); - } $_panel-imported: true; @@ -48,5 +42,4 @@ $_panel-imported: false !default; @mixin appearance_header { @extend %appearance_header }; @mixin appearance_hovered-header { @extend %appearance_hovered-header }; -@mixin appearance_selected-header { @extend %appearance_selected-header }; -@mixin appearance_disabled-header { @extend %appearance_disabled-header }; \ No newline at end of file +@mixin appearance_selected-header { @extend %appearance_selected-header }; \ No newline at end of file diff --git a/src/mixins/core/_all.scss b/src/mixins/core/_all.scss new file mode 100644 index 0000000..c44e766 --- /dev/null +++ b/src/mixins/core/_all.scss @@ -0,0 +1,3 @@ +@import "import-once"; +@import "placeholder-selectors"; +@import "data-uri"; \ No newline at end of file diff --git a/src/mixins/_data-uri.scss b/src/mixins/core/_data-uri.scss similarity index 100% rename from src/mixins/_data-uri.scss rename to src/mixins/core/_data-uri.scss diff --git a/src/mixins/_import-once.scss b/src/mixins/core/_import-once.scss similarity index 100% rename from src/mixins/_import-once.scss rename to src/mixins/core/_import-once.scss diff --git a/src/mixins/_placeholder-selectors.scss b/src/mixins/core/_placeholder-selectors.scss similarity index 100% rename from src/mixins/_placeholder-selectors.scss rename to src/mixins/core/_placeholder-selectors.scss diff --git a/src/mixins/utils/_all.scss b/src/mixins/utils/_all.scss index 68f6c18..6421898 100644 --- a/src/mixins/utils/_all.scss +++ b/src/mixins/utils/_all.scss @@ -1 +1,3 @@ -@import "color-maps"; \ No newline at end of file +@import "decoration"; +@import "compact"; +@import "blend-modes"; \ No newline at end of file diff --git a/src/mixins/utils/_blend-modes.scss b/src/mixins/utils/_blend-modes.scss new file mode 100644 index 0000000..407e7a6 --- /dev/null +++ b/src/mixins/utils/_blend-modes.scss @@ -0,0 +1,531 @@ +// SCSS blend modes, https://github.k-com/heygrady/scss-blend-modes + +// Import the Compass Plugin +//-------------------------------- +// Normal +//-------------------------------- +@function blend-normal ($foreground, $background) { + $opacity: opacity($foreground); + $background-opacity: opacity($background); + + // calculate opacity + $bm-red: red($foreground) * $opacity + red($background) * $background-opacity * (1 - $opacity); + $bm-green: green($foreground) * $opacity + green($background) * $background-opacity * (1 - $opacity); + $bm-blue: blue($foreground) * $opacity + blue($background) * $background-opacity * (1 - $opacity); + @return rgb($bm-red, $bm-green, $bm-blue); +} + +//-------------------------------- +// Multiply +//-------------------------------- +@function blend-multiply ($foreground, $background) { + $bm-red: red($background) * red($foreground) / 255; + $bm-green: green($background) * green($foreground) / 255; + $bm-blue: blue($background) * blue($foreground) / 255; + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} + +//-------------------------------- +// Lighten +//-------------------------------- +@function blend-lighten ($foreground, $background) { + $bm-red: blend-lighten-color(red($foreground), red($background)); + $bm-green: blend-lighten-color(green($foreground), green($background)); + $bm-blue: blend-lighten-color(blue($foreground), blue($background)); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} +@function blend-lighten-color($foreground, $background) { + @if $background > $foreground { + $foreground: $background; + } + @return $foreground; +} + +//-------------------------------- +// Darken +//-------------------------------- +@function blend-darken ($foreground, $background) { + $bm-red: blend-darken-color(red($foreground), red($background)); + $bm-green: blend-darken-color(green($foreground), green($background)); + $bm-blue: blend-darken-color(blue($foreground), blue($background)); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} +@function blend-darken-color($foreground, $background) { + @if $background < $foreground { + $foreground: $background; + } + @return $foreground; +} + +//-------------------------------- +// Darker Color +//-------------------------------- +@function blend-darkercolor ($foreground, $background) { + $bm-red: red($foreground); + $bm-green: green($foreground); + $bm-blue: blue($foreground); + $background-red: red($background); + $background-green: green($background); + $background-blue: blue($background); + + @if $background-red * 0.3 + $background-green * 0.59 + $background-blue * 0.11 <= $bm-red * 0.3 + $bm-green * 0.59 + $bm-blue * 0.11 { + $bm-red: $background-red; + $bm-green: $background-green; + $bm-blue: $background-blue; + } + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} + +//-------------------------------- +// Lighter Color +//-------------------------------- +@function blend-lightercolor ($foreground, $background) { + $bm-red: red($foreground); + $bm-green: green($foreground); + $bm-blue: blue($foreground); + $background-red: red($background); + $background-green: green($background); + $background-blue: blue($background); + + @if $background-red * 0.3 + $background-green * 0.59 + $background-blue * 0.11 > $bm-red * 0.3 + $bm-green * 0.59 + $bm-blue * 0.11 { + $bm-red: $background-red; + $bm-green: $background-green; + $bm-blue: $background-blue; + } + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} + +//-------------------------------- +// Linear Dodge +//-------------------------------- +@function blend-lineardodge ($foreground, $background) { + $bm-red: blend-lineardodge-color(red($foreground), red($background)); + $bm-green: blend-lineardodge-color(green($foreground), green($background)); + $bm-blue: blend-lineardodge-color(blue($foreground), blue($background)); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} +@function blend-lineardodge-color($foreground, $background) { + @if $background + $foreground > 255 { + $foreground: 255; + } + @else { + $foreground: $background + $foreground; + } + @return $foreground; +} + +//-------------------------------- +// Linear Burn +//-------------------------------- +@function blend-linearburn ($foreground, $background) { + $bm-red: blend-linearburn-color(red($foreground), red($background)); + $bm-green: blend-linearburn-color(green($foreground), green($background)); + $bm-blue: blend-linearburn-color(blue($foreground), blue($background)); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} +@function blend-linearburn-color($foreground, $background) { + @if $background + $foreground < 255 { + $foreground: 0; + } + @else { + $foreground: $background + $foreground - 255; + } + @return $foreground; +} + +//-------------------------------- +// Difference +//-------------------------------- +@function blend-difference ($foreground, $background) { + $bm-red: abs(red($background) - red($foreground)); + $bm-green: abs(green($background) - green($foreground)); + $bm-blue: abs(blue($background) - blue($foreground)); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} + +//-------------------------------- +// Screen +//-------------------------------- +@function blend-screen ($foreground, $background) { + $bm-red: blend-screen-color(red($foreground), red($background)); + $bm-green: blend-screen-color(green($foreground), green($background)); + $bm-blue: blend-screen-color(blue($foreground), blue($background)); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} +@function blend-screen-color($foreground, $background) { + @return (255 - ( ( (255 - $foreground) * (255 - $background)) / 256)); +} + +//-------------------------------- +// Exclusion +//-------------------------------- +@function blend-exclusion ($foreground, $background) { + $bm-red: blend-exclusion-color(red($foreground), red($background)); + $bm-green: blend-exclusion-color(green($foreground), green($background)); + $bm-blue: blend-exclusion-color(blue($foreground), blue($background)); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} +@function blend-exclusion-color($foreground, $background) { + @return $background - ($background * (2 / 255) - 1) * $foreground; +} + +//-------------------------------- +// Overlay +//-------------------------------- +@function blend-overlay ($foreground, $background) { + $bm-red: blend-overlay-color(red($foreground), red($background)); + $bm-green: blend-overlay-color(green($foreground), green($background)); + $bm-blue: blend-overlay-color(blue($foreground), blue($background)); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} +@function blend-overlay-color($foreground, $background) { + @if $background <= 255 / 2 { + $foreground: (2 * $background * $foreground) / 255; + } @else { + $foreground: 255 - (255 - 2 * ($background - (255 / 2))) * (255 - $foreground) / 255; + } + @return $foreground; +} + +//-------------------------------- +// Soft Light +//-------------------------------- +@function blend-softlight ($foreground, $background) { + $bm-red: blend-softlight-color(red($foreground), red($background)); + $bm-green: blend-softlight-color(green($foreground), green($background)); + $bm-blue: blend-softlight-color(blue($foreground), blue($background)); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} +@function blend-softlight-color($foreground, $background) { + @if $background < 128 { + $foreground: (($foreground / 2) + 64) * $background * (2 / 255); + } @else { + $foreground: 255 - (191 - ($foreground / 2)) * (255 - $background) * (2 / 255); + } + @return $foreground; +} + +//-------------------------------- +// Hard Light +//-------------------------------- +@function blend-hardlight ($foreground, $background) { + $bm-red: blend-hardlight-color(red($foreground), red($background)); + $bm-green: blend-hardlight-color(green($foreground), green($background)); + $bm-blue: blend-hardlight-color(blue($foreground), blue($background)); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} +@function blend-hardlight-color($foreground, $background) { + $tmp-blend: $foreground; + @if $tmp-blend < 128 { + $foreground: $background * $tmp-blend * (2 / 255); + } @else { + $foreground: 255 - (255-$background) * (255-$tmp-blend) * (2 / 255); + } + @return $foreground; +} + +//-------------------------------- +// Color Dodge +//-------------------------------- +@function blend-colordodge ($foreground, $background) { + $bm-red: blend-colordodge-color(red($foreground), red($background)); + $bm-green: blend-colordodge-color(green($foreground), green($background)); + $bm-blue: blend-colordodge-color(blue($foreground), blue($background)); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} +@function blend-colordodge-color($foreground, $background) { + $tmp: $background * 256 / (255 - $foreground); + @if $tmp > 255 or $foreground == 255 { + $foreground: 255; + } @else { + $foreground: $tmp; + } + @return $foreground; +} + +//-------------------------------- +// Color Burn +//-------------------------------- +@function blend-colorburn ($foreground, $background) { + $bm-red: blend-colorburn-color(red($foreground), red($background)); + $bm-green: blend-colorburn-color(green($foreground), green($background)); + $bm-blue: blend-colorburn-color(blue($foreground), blue($background)); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} +@function blend-colorburn-color($foreground, $background) { + $tmp: (255 - ((255 - $background) * 255) / $foreground); + + // TODO: hacked to replicate photoshop + @if $foreground == 0 { + $foreground: 255; + } @elseif $tmp < 0 { + $foreground: 0; + } @else { + $foreground: $tmp; + } + @return $foreground; +} + +//-------------------------------- +// Linear Light +//-------------------------------- +@function blend-linearlight ($foreground, $background) { + $bm-red: blend-linearlight-color(red($foreground), red($background)); + $bm-green: blend-linearlight-color(green($foreground), green($background)); + $bm-blue: blend-linearlight-color(blue($foreground), blue($background)); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} +@function blend-linearlight-color($foreground, $background) { + @if $foreground < 128 { + $foreground: blend-linearburn-color($background, 2 * $foreground); + } @else { + $foreground: blend-lineardodge-color($background, 2 * ($foreground - 128)); + } + @return $foreground; +} + +//-------------------------------- +// Vivid Light +//-------------------------------- +@function blend-vividlight ($foreground, $background) { + $bm-red: blend-vividlight-color(red($foreground), red($background)); + $bm-green: blend-vividlight-color(green($foreground), green($background)); + $bm-blue: blend-vividlight-color(blue($foreground), blue($background)); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} + +@function blend-vividlight-color($foreground, $background) { + @if $foreground < 128 { + $foreground: blend-colorburn-color(2 * $foreground, $background); + } @else { + $foreground: blend-colordodge-color(2 * ($foreground - 128), $background); + } + @return $foreground; +} + +//-------------------------------- +// Pin Light +//-------------------------------- +@function blend-pinlight ($foreground, $background) { + $bm-red: blend-pinlight-color(red($foreground), red($background)); + $bm-green: blend-pinlight-color(green($foreground), green($background)); + $bm-blue: blend-pinlight-color(blue($foreground), blue($background)); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} + +@function blend-pinlight-color($foreground, $background) { + @if $foreground < 128 { + $foreground: blend-darken-color($background, 2 * $foreground); + } @else { + $foreground: blend-lighten-color($background, 2 * ($foreground - 128)); + } + @return $foreground; +} + +//-------------------------------- +// Hard Mix +//-------------------------------- +@function blend-hardmix ($foreground, $background) { + $bm-red: blend-hardmix-color(red($foreground), red($background)); + $bm-green: blend-hardmix-color(green($foreground), green($background)); + $bm-blue: blend-hardmix-color(blue($foreground), blue($background)); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} + +@function blend-hardmix-color($foreground, $background) { + $tmp: blend-vividlight-color($foreground, $background); + @if $tmp < 128 { + $foreground: 0; + } @else { + $foreground: 255; + } + @return $foreground; +} + + +// Unique to Photoshop + +//-------------------------------- +// Color Blend +//-------------------------------- +@function blend-colorblend ($foreground, $background) { + $foreground-hsv: color-to-hsv($foreground); + $background-hsv: color-to-hsv($background); + + $bm-hsv: nth($foreground-hsv, 1), nth($foreground-hsv, 2), nth($background-hsv, 3); + $bm-color: hsv-to-color($bm-hsv); + + @return blend-normal(rgba(red($bm-color), green($bm-color), blue($bm-color), opacity($foreground)), $background); +} + +//-------------------------------- +// Dissolve +//-------------------------------- +@function blend-dissolve ($foreground, $background) { + // The Dissolve blend mode acts on transparent and partially transparent pixels + // it treats transparency as a pixel pattern and applies a diffusion dither pattern. + // @see http://photoblogstop.k-com/photoshop/photoshop-blend-modes-explained + @return $foreground; +} + +//-------------------------------- +// Divide +//-------------------------------- +@function blend-divide ($foreground, $background) { + $bm-red: blend-divide-colors(red($foreground), red($background)); + $bm-green: blend-divide-colors(green($foreground), green($background)); + $bm-blue:blend-divide-colors(blue($foreground), blue($background)); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} +@function blend-divide-colors($foreground, $background) { + @return min((($background / 255) / ($foreground / 255)) * 255, 255); +} + +//-------------------------------- +// Hue +//-------------------------------- +@function blend-hue ($foreground, $background) { + $foreground-hsv: color-to-hsv($foreground); + $background-hsv: color-to-hsv($background); + + $bm-hsv: nth($foreground-hsv, 1), nth($background-hsv, 2), nth($background-hsv, 3); + $bm-color: hsv-to-color($bm-hsv); + + @return blend-normal(rgba(red($bm-color), green($bm-color), blue($bm-color), opacity($foreground)), $background); +} + +//-------------------------------- +// Luminosity +//-------------------------------- +@function blend-luminosity ($foreground, $background) { + $foreground-hsv: color-to-hsv($foreground); + $background-hsv: color-to-hsv($background); + + $bm-hsv: nth($background-hsv, 1), nth($background-hsv, 2), nth($foreground-hsv, 3); + $bm-color: hsv-to-color($bm-hsv); + + @return blend-normal(rgba(red($bm-color), green($bm-color), blue($bm-color), opacity($foreground)), $background); +} + +//-------------------------------- +// Saturation +//-------------------------------- +@function blend-saturation ($foreground, $background) { + $foreground-hsv: color-to-hsv($foreground); + $background-hsv: color-to-hsv($background); + + $bm-hsv: nth($background-hsv, 1), nth($foreground-hsv, 2), nth($background-hsv, 3); + $bm-color: hsv-to-color($bm-hsv); + + @return blend-normal(rgba(red($bm-color), green($bm-color), blue($bm-color), opacity($foreground)), $background); +} + +//-------------------------------- +// Subtract +//-------------------------------- +@function blend-subtract ($foreground, $background) { + $bm-red: max(red($background) - red($foreground), 0); + $bm-green: max(green($background) - green($foreground), 0); + $bm-blue: max(blue($background) - blue($foreground), 0); + + @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background); +} + +//-------------------------------- +// HSL and HSV +//-------------------------------- +// @see https://gist.k-github.k-com/1069204 +@function hsv-to-hsl($h, $s: 0, $v: 0) { + @if type-of($h) == 'list' { + $v: nth($h, 3); + $s: nth($h, 2); + $h: nth($h, 1); + } + + @if unit($h) == 'deg' { + $h: 3.1415 * 2 * ($h / 360deg); + } + @if unit($s) == '%' { + $s: 0 + ($s / 100%); + } + @if unit($v) == '%' { + $v: 0 + ($v / 100%); + } + + $ss: $s * $v; + $ll: (2 - $s) * $v; + + @if $ll <= 1 and $ll != 0 { + $ss: $ss / $ll; + } @else if ($ll == 2) { + $ss: 0; + } @else { + $ss: $ss / (2 - $ll); + } + + $ll: $ll / 2; + + @return 360deg * $h / (3.1415 * 2), percentage(max(0, min(1, $ss))), percentage(max(0, min(1, $ll))); +} + +@function hsl-to-hsv($h, $ss: 0, $ll: 0) { + @if type-of($h) == 'list' { + $ll: nth($h, 3); + $ss: nth($h, 2); + $h: nth($h, 1); + } @else if type-of($h) == 'color' { + $ll: lightness($h); + $ss: saturation($h); + $h: hue($h); + } + + @if unit($h) == 'deg' { + $h: 3.1415 * 2 * ($h / 360deg); + } + @if unit($ss) == '%' { + $ss: 0 + ($ss / 100%); + } + @if unit($ll) == '%' { + $ll: 0 + ($ll / 100%); + } + + $ll: $ll * 2; + + @if $ll <= 1 { + $ss: $ss * $ll; + } @else { + $ss: $ss * (2 - $ll); + } + + $v: ($ll + $ss) / 2; + $s: if($ll + $ss == 0, 0, (2 * $ss) / ($ll + $ss)); + + @return 360deg * $h / (3.1415 * 2), percentage(max(0, min(1, $s))), percentage(max(0, min(1, $v))); +} + +@function color-to-hsv($color) { + @return hsl-to-hsv($color); +} + +@function hsv-to-color($h, $s: 0, $v: 0) { + $hsl: hsv-to-hsl($h, $s, $v); + @return hsl(nth($hsl, 1), nth($hsl, 2), nth($hsl, 3)); +} \ No newline at end of file diff --git a/src/mixins/utils/_color-maps.scss b/src/mixins/utils/_color-maps.scss deleted file mode 100644 index 078366d..0000000 --- a/src/mixins/utils/_color-maps.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Calendar widget -// $calendar-colors: ( $calendar-text, $calendar-bg, $calendar-border ); -// $calendar-header-color: ( $calendar-header-text, $calendar-header-bg, $calendar-header-border ); \ No newline at end of file diff --git a/src/mixins/_compact.scss b/src/mixins/utils/_compact.scss similarity index 100% rename from src/mixins/_compact.scss rename to src/mixins/utils/_compact.scss diff --git a/src/mixins/_decoration.scss b/src/mixins/utils/_decoration.scss similarity index 100% rename from src/mixins/_decoration.scss rename to src/mixins/utils/_decoration.scss diff --git a/src/panelbar/_theme.scss b/src/panelbar/_theme.scss index 41e113c..aacd14c 100644 --- a/src/panelbar/_theme.scss +++ b/src/panelbar/_theme.scss @@ -1,6 +1,5 @@ @import '../base/states'; @import './layout'; -@import '../mixins/blend-modes'; $panelbar-color: $normal-text-color !default; $panelbar-border-color: rgba(0, 0, 0, .08) !default; diff --git a/src/panelbar/main.scss b/src/panelbar/main.scss index 1dc6229..940b55c 100644 --- a/src/panelbar/main.scss +++ b/src/panelbar/main.scss @@ -1,3 +1,3 @@ @import '../variables'; -@import '../mixins/import-once'; +@import '../mixins/all'; @import 'theme'; diff --git a/src/popup/_theme.scss b/src/popup/_theme.scss index 6b5237e..fff2c3e 100644 --- a/src/popup/_theme.scss +++ b/src/popup/_theme.scss @@ -1,4 +1,3 @@ -@import '../mixins/blend-modes'; @import '../animation/main'; @import '../base/states'; @import './layout'; diff --git a/src/popup/main.scss b/src/popup/main.scss index 1dc6229..940b55c 100644 --- a/src/popup/main.scss +++ b/src/popup/main.scss @@ -1,3 +1,3 @@ @import '../variables'; -@import '../mixins/import-once'; +@import '../mixins/all'; @import 'theme'; diff --git a/src/progressbar/images/indeterminate.scss b/src/progressbar/images/indeterminate.scss index 65a4380..91e4d11 100644 --- a/src/progressbar/images/indeterminate.scss +++ b/src/progressbar/images/indeterminate.scss @@ -1,7 +1,5 @@ -@import '../../mixins/import-once'; -@import '../../mixins/data-uri'; +@import '../../mixins/core/all'; @include exports('indeterminate.gif') { @include register-data-uri('indeterminate.gif', 'data:image/gif;base64,R0lGODlhFgAWAJECAPDw8OTk5AAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFBAACACwAAAAAFgAWAAACL4yPAcsNmZyESDp6bMNGM654DyeOWAmipJiyqweGWuy+Fg23s37zk38BboQf4qIAACH5BAUEAAIALAAAAAAWABYAAAIwBIKpYe231ntRTlfTxZlt03lf+IFdCWUoWbLj2cKvGstXKN6ubk94Tdv8ZkFe0VEAACH5BAUEAAIALAAAAAAWABYAAAIwhBGpG+fH4nuRTVfXhTltnn1G14ikiHToaapt+Far+7E1vZFlbl96LLvhJj8hzFEAACH5BAUEAAIALAAAAAAWABYAAAIwhB+pG+fI2HtRTljTxXmbrHgAqImkOILoaapt91ar67E1vdk5fpHNzaPoJr6Y7FAAACH5BAUEAAIALAAAAAAWABYAAAIvhG+hy4EPmoRINnosw0krHnkOJ45YCaKpB4ZaK8Ls+tKWXJOznp+736OogMGHqgAAIfkEBQQAAgAsAAAAABYAFgAAAi+Ej6HLgQ+ahEkyeuzFUSveeaD3caRjkqOaiqsGhlbMtvN72xO+6w3t8m2EC6CnAAAh+QQFBAACACwAAAAAFgAWAAACMAyOCcHtCp1kME1Z0X15bdp9YCYaodh5X1qy6LnCW6pe9CtPd5xj7vyzBXVDX69RAAAh+QQFBAACACwAAAAAFgAWAAACMIyBqWDtseJ7cU1X1cWZ7dN9YCZCodh5X1qy6LnCmxuTrzyl6qXf9kzjBXNDSjFQAAAh+QQFBAACACwAAAAAFgAWAAACLowNqQvnx+J7kU1X14U5bdQ1XxCOZGeWo/qxm3vBk0yhq93iL83pMw/y1YQYWAEAIfkEBQQAAgAsAAAAABYAFgAAAjCMH6DLgJ9ag0hOaizDWSseeaD3caQziqkGhlZLwqo5Y/H64pLM6hddg5x8P8rQUAAAIfkEBQQAAgAsAAAAABYAFgAAAjCMf6DLgB+ahEg2muzCRm/uKVwUjqEDlqk3klqrrhbMmrU82a8+8zl+8QWBQ8opUAAAOw==') -} - +} \ No newline at end of file diff --git a/src/progressbar/main.scss b/src/progressbar/main.scss index 1dc6229..940b55c 100644 --- a/src/progressbar/main.scss +++ b/src/progressbar/main.scss @@ -1,3 +1,3 @@ @import '../variables'; -@import '../mixins/import-once'; +@import '../mixins/all'; @import 'theme'; diff --git a/src/scrollview/main.scss b/src/scrollview/main.scss index 1dc6229..940b55c 100644 --- a/src/scrollview/main.scss +++ b/src/scrollview/main.scss @@ -1,3 +1,3 @@ @import '../variables'; -@import '../mixins/import-once'; +@import '../mixins/all'; @import 'theme'; diff --git a/src/slider/images/slider-h.scss b/src/slider/images/slider-h.scss index 15e700f..631ccb6 100644 --- a/src/slider/images/slider-h.scss +++ b/src/slider/images/slider-h.scss @@ -1,5 +1,4 @@ -@import '../../mixins/import-once'; -@import '../../mixins/data-uri'; +@import '../../mixins/core/all'; @include exports('slider-h.gif') { @include register-data-uri('slider-h.gif', 'data:image/gif;base64,R0lGODlhAQC0AIABALi4uAAAACH5BAEAAAEALAAAAAABALQAAAIWjIGJxqzazlux2ovlzND2rAHgSIZWAQA7') diff --git a/src/slider/images/slider-v.scss b/src/slider/images/slider-v.scss index 2fd924a..b1e97e7 100644 --- a/src/slider/images/slider-v.scss +++ b/src/slider/images/slider-v.scss @@ -1,5 +1,4 @@ -@import '../../mixins/import-once'; -@import '../../mixins/data-uri'; +@import '../../mixins/core/all'; @include exports('slider-v.gif') { @include register-data-uri('slider-v.gif', 'data:image/gif;base64,R0lGODlhtAABAIABALi4uAAAACH5BAEAAAEALAAAAAC0AAEAAAIWjIGJxqzazlux2ovlzND2rAHgSIZWAQA7') diff --git a/src/slider/main.scss b/src/slider/main.scss index 1dc6229..940b55c 100644 --- a/src/slider/main.scss +++ b/src/slider/main.scss @@ -1,3 +1,3 @@ @import '../variables'; -@import '../mixins/import-once'; +@import '../mixins/all'; @import 'theme'; diff --git a/src/switch/main.scss b/src/switch/main.scss index 1dc6229..940b55c 100644 --- a/src/switch/main.scss +++ b/src/switch/main.scss @@ -1,3 +1,3 @@ @import '../variables'; -@import '../mixins/import-once'; +@import '../mixins/all'; @import 'theme'; diff --git a/src/tabstrip/_theme.scss b/src/tabstrip/_theme.scss index 48c82a7..62004c6 100644 --- a/src/tabstrip/_theme.scss +++ b/src/tabstrip/_theme.scss @@ -1,6 +1,5 @@ @import '../base/states'; @import './layout'; -@import '../mixins/blend-modes'; $tabstrip-tabs-color: $accent !default; $tabstrip-background-color: $background !default; diff --git a/src/tabstrip/main.scss b/src/tabstrip/main.scss index 1dc6229..940b55c 100644 --- a/src/tabstrip/main.scss +++ b/src/tabstrip/main.scss @@ -1,3 +1,3 @@ @import '../variables'; -@import '../mixins/import-once'; +@import '../mixins/all'; @import 'theme'; diff --git a/src/upload/main.scss b/src/upload/main.scss index 1dc6229..5a3002d 100644 --- a/src/upload/main.scss +++ b/src/upload/main.scss @@ -1,3 +1,3 @@ @import '../variables'; -@import '../mixins/import-once'; -@import 'theme'; +@import '../mixins/all'; +@import 'theme'; \ No newline at end of file