@import '~nord/src/sass/nord.scss';

$font-family-sans-serif: 'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;
$font-family-monospace: Menlo, Monaco, Consolas, 'Courier New', monospace;
$font-size-base: 14px;
$font-size-large: 18px;
$font-size-small: 12px;
$text-color: #000000;
$border-color: #f0f0f0;
$border-color-dark: #ddd;
$list-item-hover: #fbfbfb;
$list-icon-color: #767679;
$disabled-box-opacity: 1;
$border-radius: 3px;
$line-height-base: 1.42857143;

$gray: #555;
$gray-light: #777;
$text-muted: $gray-light;

$brand-primary: #175DDC;
$brand-danger: #dd4b39;
$brand-success: #00a65a;
$brand-info: #555555;
$brand-warning: #bf7e16;
$brand-primary-accent: #1252A3;

$background-color: #f0f0f0;

$box-background-color: white;
$box-background-hover-color: $list-item-hover;
$box-border-color: $border-color;

$button-border-color: darken($border-color-dark, 12%);
$button-background-color: white;
$button-color: lighten($text-color, 40%);
$button-color-primary: darken($brand-primary, 8%);
$button-color-danger: darken($brand-danger, 10%);

$solarizedDarkBase03:    #002b36;
$solarizedDarkBase02:    #073642;
$solarizedDarkBase01:    #586e75;
$solarizedDarkBase00:    #657b83;
$solarizedDarkBase0:     #839496;
$solarizedDarkBase1:     #93a1a1;
$solarizedDarkBase2:     #eee8d5;
$solarizedDarkBase3:     #fdf6e3;
$solarizedDarkYellow:    #b58900;
$solarizedDarkOrange:    #cb4b16;
$solarizedDarkRed:       #dc322f;
$solarizedDarkMagenta:   #d33682;
$solarizedDarkViolet:    #6c71c4;
$solarizedDarkBlue:      #268bd2;
$solarizedDarkCyan:      #2aa198;
$solarizedDarkGreen:     #859900;

$themes: (
    light: (
        textColor: $text-color,
        borderColor: $border-color-dark,
        backgroundColor: $background-color,
        backgroundColorAlt: #ffffff,
        scrollbarColor: rgba(100,100,100,.2),
        scrollbarHoverColor: rgba(100,100,100,.4),
        boxBackgroundColor: $box-background-color,
        boxBackgroundHoverColor: $box-background-hover-color,
        boxBorderColor: $box-border-color,
        tabBackgroundColor: #ffffff,
        tabBackgroundHoverColor: $list-item-hover,
        headerColor: #ffffff,
        headerBackgroundColor: $brand-primary,
        headerBackgroundHoverColor: rgba(255, 255, 255, 0.1),
        headerBorderColor: $brand-primary,
        headerInputBackgroundColor: darken($brand-primary, 8%),
        headerInputBackgroundFocusColor: darken($brand-primary, 10%),
        headerInputColor: #ffffff,
        headerInputPlaceholderColor: lighten($brand-primary, 35%),
        listItemBackgroundHoverColor: $list-item-hover,
        disabledIconColor: $list-icon-color,
        disabledBoxOpacity: $disabled-box-opacity,
        headingColor: $gray-light,
        labelColor: $gray-light,
        mutedColor: $text-muted,
        totpStrokeColor: $brand-primary,
        boxRowButtonColor: $brand-primary,
        boxRowButtonHoverColor: darken($brand-primary, 10%),
        inputBorderColor: darken($border-color-dark, 7%),
        inputBackgroundColor: #ffffff,
        inputPlaceholderColor: lighten($gray-light, 35%),
        buttonBackgroundColor: $button-background-color,
        buttonBorderColor: $button-border-color,
        buttonColor: $button-color,
        buttonPrimaryColor: $button-color-primary,
        buttonDangerColor: $button-color-danger,
        primaryColor: $brand-primary,
        primaryAccentColor: $brand-primary-accent,
        dangerColor: $brand-danger,
        successColor: $brand-success,
        infoColor: $brand-info,
        warningColor: $brand-warning,
        logoSuffix: 'dark',
        passwordNumberColor: #007fde,
        passwordSpecialColor: #c40800,
        calloutBorderColor: $border-color-dark,
        calloutBackgroundColor: $box-background-color,
    ),
    dark: (
        textColor: #ffffff,
        borderColor: #111111,
        backgroundColor: #222222,
        backgroundColorAlt: #3d3d3d,
        scrollbarColor: #4d4d4d,
        scrollbarHoverColor: #5f5f5f,
        boxBackgroundColor: #363636,
        boxBackgroundHoverColor: #3f3f3f,
        boxBorderColor: #2f2f2f,
        tabBackgroundColor: #363636,
        tabBackgroundHoverColor: #3f3f3f,
        headerColor: #ffffff,
        headerBackgroundColor: #363636,
        headerBackgroundHoverColor: #3f3f3f,
        headerBorderColor: #111111,
        headerInputBackgroundColor: #222222,
        headerInputBackgroundFocusColor: #1d1d1d,
        headerInputColor: #ffffff,
        headerInputPlaceholderColor: #707070,
        listItemBackgroundHoverColor: #3c3c3c,
        disabledIconColor: #cacaca,
        disabledBoxOpacity: 0.5,
        headingColor: #a3a3a3,
        labelColor: #a3a3a3,
        mutedColor: #a3a3a3,
        totpStrokeColor: #cacaca,
        boxRowButtonColor: #cacaca,
        boxRowButtonHoverColor: #ffffff,
        inputBorderColor: #222222,
        inputBackgroundColor: #363636,
        inputPlaceholderColor: #707070,
        buttonBackgroundColor: #363636,
        buttonBorderColor: #1f1f1f,
        buttonColor: #e0e0e0,
        buttonPrimaryColor: #46ace7,
        buttonDangerColor: #ff3e24,
        primaryColor: #52bdfb,
        primaryAccentColor: #3ea1da,
        dangerColor: #ff3e24,
        successColor: $brand-success,
        infoColor: $brand-info,
        warningColor: $brand-warning,
        logoSuffix: 'white',
        passwordNumberColor: #52bdfb,
        passwordSpecialColor: #ff7c70,
        calloutBorderColor: #111111,
        calloutBackgroundColor: #3d3d3d,
    ),
    nord: (
        textColor: $nord5,
        borderColor: $nord0,
        backgroundColor: $nord1,
        backgroundColorAlt: $nord2,
        scrollbarColor: $nord4,
        scrollbarHoverColor: $nord6,
        boxBackgroundColor: $nord2,
        boxBackgroundHoverColor: $nord3,
        boxBorderColor: $nord1,
        tabBackgroundColor: $nord1,
        tabBackgroundHoverColor: $nord2,
        headerColor: $nord5,
        headerBackgroundColor: $nord1,
        headerBackgroundHoverColor: $nord2,
        headerBorderColor: $nord0,
        headerInputBackgroundColor: $nord6,
        headerInputBackgroundFocusColor: $nord5,
        headerInputColor: $nord2,
        headerInputPlaceholderColor: $nord3,
        listItemBackgroundHoverColor: $nord3,
        disabledIconColor: $nord4,
        disabledBoxOpacity: 0.5,
        headingColor: $nord4,
        labelColor: $nord4,
        mutedColor: $nord4,
        totpStrokeColor: $nord4,
        boxRowButtonColor: $nord4,
        boxRowButtonHoverColor: $nord6,
        inputBorderColor: $nord0,
        inputBackgroundColor: $nord2,
        inputPlaceholderColor: lighten($nord3, 20%),
        buttonBackgroundColor: $nord3,
        buttonBorderColor: $nord0,
        buttonColor: $nord5,
        buttonPrimaryColor: $nord8,
        buttonDangerColor: $nord11,
        primaryColor: $nord9,
        primaryAccentColor: $nord8,
        dangerColor: $nord11,
        successColor: $nord14,
        infoColor: $nord9,
        warningColor: $nord12,
        logoSuffix: 'white',
        passwordNumberColor: $nord8,
        passwordSpecialColor: $nord12,
        calloutBorderColor: $nord0,
        calloutBackgroundColor: $nord2,
    ),
    solarizedDark: (
        textColor: $solarizedDarkBase2,
        borderColor: $solarizedDarkBase03,
        backgroundColor: $solarizedDarkBase03,
        backgroundColorAlt: $solarizedDarkBase02,
        scrollbarColor: $solarizedDarkBase0,
        scrollbarHoverColor: $solarizedDarkBase2,
        boxBackgroundColor: $solarizedDarkBase03,
        boxBackgroundHoverColor: $solarizedDarkBase02,
        boxBorderColor: $solarizedDarkBase02,
        tabBackgroundColor: $solarizedDarkBase02,
        tabBackgroundHoverColor: $solarizedDarkBase01,
        headerColor: $solarizedDarkBase1,
        headerBackgroundColor: $solarizedDarkBase02,
        headerBackgroundHoverColor: $solarizedDarkBase01,
        headerBorderColor: $solarizedDarkBase03,
        headerInputBackgroundColor: $solarizedDarkBase2,
        headerInputBackgroundFocusColor: $solarizedDarkBase1,
        headerInputColor: $solarizedDarkBase01,
        headerInputPlaceholderColor: $solarizedDarkBase00,
        listItemBackgroundHoverColor: $solarizedDarkBase02,
        disabledIconColor: $solarizedDarkBase0,
        disabledBoxOpacity: 0.5,
        headingColor: $solarizedDarkBase0,
        labelColor: $solarizedDarkBase0,
        mutedColor: $solarizedDarkBase0,
        totpStrokeColor: $solarizedDarkBase0,
        boxRowButtonColor: $solarizedDarkBase0,
        boxRowButtonHoverColor: $solarizedDarkBase2,
        inputBorderColor: $solarizedDarkBase03,
        inputBackgroundColor: $solarizedDarkBase01,
        inputPlaceholderColor: lighten($solarizedDarkBase00, 20%),
        buttonBackgroundColor: $solarizedDarkBase00,
        buttonBorderColor: $solarizedDarkBase03,
        buttonColor: $solarizedDarkBase1,
        buttonPrimaryColor: $solarizedDarkCyan,
        buttonDangerColor: $solarizedDarkRed,
        primaryColor: $solarizedDarkGreen,
        primaryAccentColor: $solarizedDarkCyan,
        dangerColor: $solarizedDarkRed,
        successColor: $solarizedDarkGreen,
        infoColor: $solarizedDarkGreen,
        warningColor: $solarizedDarkYellow,
        logoSuffix: 'white',
        passwordNumberColor: $solarizedDarkCyan,
        passwordSpecialColor: $solarizedDarkYellow,
        calloutBorderColor: $solarizedDarkBase03,
        calloutBackgroundColor: $solarizedDarkBase01,
    ),
);

@mixin themify($themes: $themes) {
    @each $theme, $map in $themes {
        html.theme_#{$theme} & {
            $theme-map: () !global;
            @each $key, $submap in $map {
                $value: map-get(map-get($themes, $theme), '#{$key}');
                $theme-map: map-merge($theme-map, ($key: $value)) !global;
            }
            @content;
            $theme-map: null !global;
        }
    }
}

@function themed($key) {
    @return map-get($theme-map, $key);
}
