''
'' hacker theme based off of the Jekyll theme of the same name
'' https://github.com/pages-themes/hacker
''
'' Author: Brett Schwarz
'' Copyright (c) 2019 by Brett Schwarz

!$THEME = "hacker"

!if %not(%variable_exists("$BGCOLOR"))
!$BGCOLOR = "transparent"
!endif

skinparam BackgroundColor $BGCOLOR
skinparam useBetaStyle false

''
'' Colors taken from the _default_colors.scss file for jekyll hacker theme
''
!$PRIMARY = "#b5e853"
!$PRIMARY_LIGHT = "#d3f198"
!$PRIMARY_DARK = "#6d8b32"
!$PRIMARY_TEXT = "#151515"
!$SECONDARY = "#6a9fb5"
!$SECONDARY_LIGHT = "#88b2c4"
!$SECONDARY_DARK = "#557f91"
!$SECONDARY_TEXT = "#fefefe"
!$SUCCESS = "#90a959"
!$SUCCESS_LIGHT = "#a6ba7a"
!$INFO = "#aa759f"
!$INFO_LIGHT = "#bb91b2"
!$INFO_DARK = "#885E7F"
!$WARNING = "#f4bf75"
!$WARNING_LIGHT = "#f6cc91"
!$WARNING_TEXT = "#151515"
!$DANGER = "#ac4142"
!$DANGER_LIGHT = "#bd6768"
!$LIGHT = "#151515"
!$DARK = "#eaeaea"

!procedure $success($msg)
  <font color=$SUCCESS><b>$msg
!endprocedure

!procedure $failure($msg)
  <font color=$DANGER><b>$msg
!endprocedure

!procedure $warning($msg)
  <font color=$WARNING><b>$msg
!endprocedure

!procedure $primary_scheme()
	FontColor $PRIMARY_TEXT
	BorderColor $PRIMARY_LIGHT
	BackgroundColor $PRIMARY_LIGHT-$PRIMARY
!endprocedure


''
'' Global Default Values
''
skinparam defaultFontName       "Verdana"
skinparam defaultFontSize       12
skinparam dpi                   100
skinparam shadowing             false
skinparam roundcorner           40
skinparam ParticipantPadding    40
skinparam BoxPadding            40
skinparam Padding               5
skinparam ArrowColor            $DARK
skinparam stereotype {
    CBackgroundColor $SECONDARY_DARK
    CBorderColor $SECONDARY_LIGHT
    ABackgroundColor $SUCCESS_LIGHT
    ABorderColor $SUCCESS_DARK
    IBackgroundColor $DANGER_LIGHT
    IBorderColor $DANGER_DARK
    EBackgroundColor $WARNING_LIGHT
    EBorderColor $WARNING_DARK
    NBackgroundColor $INFO_LIGHT
    NBorderColor $INFO_DARK
}
skinparam title {
	FontColor	                 $PRIMARY
	BorderColor	                 $PRIMARY
	FontSize	    	         20
	BorderRoundCorner            8
	BorderThickness 	         1
	BackgroundColor              $LIGHT-black
}


skinparam legend {
	BackgroundColor $SECONDARY
	BorderColor $SECONDARY_DARK
	FontColor $DARK
}

!startsub swimlane
skinparam swimlane {
	BorderColor $INFO
	BorderThickness 2
	TitleBackgroundColor  $SECONDARY_LIGHT-$SECONDARY
	TitleFontColor $PRIMARY
}
!endsub

!startsub activity

skinparam activity {
	$primary_scheme()
	BarColor $SUCCESS
	StartColor $INFO
	EndColor $INFO
	''
	DiamondBackgroundColor $SECONDARY_LIGHT-$SECONDARY
  	DiamondBorderColor $SECONDARY_LIGHT
  	DiamondFontColor $SECONDARY_TEXT
}
!endsub

!startsub participant

skinparam participant {
	$primary_scheme()
	BorderThickness 2
}
!endsub

!startsub actor

skinparam actor {
	$primary_scheme()
	FontColor $DARK
}
!endsub

!startsub arrow

skinparam arrow {
	Thickness 3
	Color $PRIMARY
	FontColor $FGCOLOR
}
!endsub

!startsub sequence

skinparam sequence {
	BorderColor $PRIMARY
	' For some reason sequence title font color does not pick up from global
	TitleFontColor $PRIMARY
	BackgroundColor $BGCOLOR
	StartColor $PRIMARY
	EndColor $PRIMARY
	''
	BoxBackgroundColor $BGCOLOR
	BoxBorderColor $DARK
	BoxFontColor $DARK
	''
	DelayFontColor $DARK
	''
	LifeLineBorderColor $SECONDARY
	LifeLineBorderThickness 2
	LifeLineBackgroundColor $SECONDARY_DARK
	''
	GroupBackgroundColor $LIGHT
	GroupBorderColor $DARK
	GroupFontColor $DARK
	GroupHeaderFontColor $INFO
	GroupHeaderBackgroundColor $BGCOLOR
	''
	DividerBackgroundColor $DARK
    DividerBorderColor $DARK
    DividerBorderThickness 2
    DividerFontColor $LIGHT
	''
	ReferenceBackgroundColor $BGCOLOR
	ReferenceBorderColor $DARK
	ReferenceFontColor $DARK
	ReferenceHeaderBackgroundColor $LIGHT
	''
	StereotypeFontColor $PRIMARY_TEXT
}
!endsub

!startsub partition

skinparam partition {
	BorderColor $PRIMARY
	FontColor $PRIMARY
	BackgroundColor $LIGHT-black
}
!endsub

!startsub collections

skinparam collections {
	$primary_scheme()
}
!endsub

!startsub control

skinparam control {
	$primary_scheme()
	FontColor $DARK
}
!endsub

!startsub entity

skinparam entity {
	$primary_scheme()
	FontColor $DARK
}
!endsub

!startsub boundary

skinparam boundary {
	$primary_scheme()
	FontColor $DARK
}
!endsub

!startsub agent

skinparam agent {
	BackgroundColor $WARNING_LIGHT-$WARNING
	BorderColor $WARNING_LIGHT
	FontColor $DARK
}
!endsub

!startsub note

skinparam note {
	BorderThickness 1
	BackgroundColor $INFO_LIGHT-$INFO_DARK
	BorderColor $INFO_DARK
	FontColor $WHITE
}
!endsub

!startsub artifact

skinparam artifact {
	BackgroundColor $DARK
	BorderColor white
	FontColor $LIGHT
}
!endsub

!startsub component

skinparam component {
	$primary_scheme()
}
!endsub

!startsub interface

skinparam interface {
	BackgroundColor  $DANGER_LIGHT-$DANGER
	BorderColor  $DANGER_LIGHT
	FontColor $DARK
}
!endsub

!startsub storage

skinparam storage {
	BackgroundColor $WARNING_LIGHT-$WARNING
  	BorderColor $WARNING_LIGHT
	FontColor $WARNING_TEXT
}
!endsub

!startsub node

skinparam node {
	BackgroundColor  $LIGHT-black
	BorderColor $PRIMARY_LIGHT
	FontColor $DARK
}
!endsub

!startsub cloud

skinparam cloud {
	BackgroundColor $BGCOLOR
	BorderColor $DARK
	FontColor $DARK
}
!endsub

!startsub database

skinparam database {
	BackgroundColor  $LIGHT-black
	BorderColor $PRIMARY_LIGHT
	FontColor $DARK
}
!endsub

!startsub class

skinparam class {
	$primary_scheme()
	HeaderBackgroundColor $PRIMARY_LIGHT-$PRIMARY
	StereotypeFontColor $DARK
	BorderThickness 1
	AttributeFontColor $LIGHT
	AttributeFontSize 11
}
!endsub

!startsub object

skinparam object {
	$primary_scheme()
	StereotypeFontColor $DARK
	BorderThickness 1
	AttributeFontColor $LIGHT
	AttributeFontSize 11
}
!endsub

!startsub usecase

skinparam usecase {
	$primary_scheme()
	BorderThickness 2
	StereotypeFontColor $PRIMARY
}
!endsub

!startsub rectangle

skinparam rectangle {
	BackgroundColor $BGCOLOR
	BorderColor $PRIMARY
	BorderThickness 2
	FontColor $PRIMARY_DARK
	StereotypeFontColor $PRIMARY
}
!endsub

!startsub package

skinparam package {
	BackgroundColor $LIGHT
  	BorderColor $PRIMARY
	FontColor $PRIMARY
	BorderThickness 2
}
!endsub

!startsub folder

skinparam folder {
	BackgroundColor $LIGHT-black
  	BorderColor $WARNING
	FontColor $WARNING
	BorderThickness 2
}
!endsub

!startsub frame

skinparam frame {
	BackgroundColor $LIGHT-black
  	BorderColor $INFO
	FontColor $INFO
	BorderThickness 2
}
!endsub

!startsub state

skinparam state {
	$primary_scheme()
	StartColor $INFO
	EndColor $INFO
	AttributeFontColor $SECONDARY_TEXT
	AttributeFontSize 11
}
!endsub

!startsub queue

skinparam queue {
	$primary_scheme()
}
!endsub

!startsub card

skinparam card {
	BackgroundColor $INFO_LIGHT-$INFO
	BorderColor $INFO_LIGHT
	FontColor $INFO_TEXT
}
!endsub

!startsub file

skinparam file {
	BackgroundColor $SECONDARY_LIGHT-$SECONDARY
	BorderColor $SECONDARY_LIGHT
	FontColor $DARK
}
!endsub

!startsub stack

skinparam stack {
	$primary_scheme()
}
!endsub

!if %variable_exists("NEWSTYLE")
<style>
wbsDiagram {
    LineColor $PRIMARY
    BorderThickness 3
    BackgroundColor $LIGHT-black
    FontColor $PRIMARY
    :depth(0) {
        fontSize 16
        fontStyle bold
        fontColor $SECONDARY
    }
    :depth(1) {
        fontSize 14
        padding 5
        fontStyle bold
    }
    :depth(2) {
        fontSize 12
        padding 4
    }
    :depth(3) {
        fontSize 11
        padding 3
        fontColor $INFO
    }

}
</style>

<style>
mindmapDiagram {
    LineColor $PRIMARY
    BorderThickness 3
    BackgroundColor $LIGHT-black
    FontColor $PRIMARY
    :depth(0) {
        fontSize 16
        fontStyle bold
        fontColor $SECONDARY
    }
    :depth(1) {
        fontSize 14
        padding 5
        fontStyle bold
    }
    :depth(2) {
        fontSize 12
        padding 4
    }
    :depth(3) {
        fontSize 11
        padding 3
        fontColor $INFO
    }

}
</style>
!endif

