''
'' Colors representing the black knight
'' Looks best on a dark background
''
'' Author: Brett Schwarz
''
''
!$THEME = "black-knight"
''
'' Assume if the background is transparent, that the 
'' background will be dark for this theme
''
!assume transparent dark
''
'' If no background color is given, then default transparent
''
!if %not(%variable_exists("$BGCOLOR"))
!$BGCOLOR = "transparent"
!endif
''
''
'' If no gradient is given, default to 20
''
!if %not(%variable_exists("$GRADIENT"))
!$GRADIENT = 20
!endif
''
skinparam backgroundColor $BGCOLOR
skinparam useBetaStyle false
''
'' Default color palette to be used in the definitions below
''
!$PRIMARY = "#303030"
!$PRIMARY_DARK = %darken($PRIMARY, $GRADIENT)
!$PRIMARY_LIGHT = %lighten($PRIMARY, $GRADIENT)
!$PRIMARY_TEXT = "#fff200"
!$SECONDARY = "#484848"
!$SECONDARY_DARK = %darken($SECONDARY, $GRADIENT)
!$SECONDARY_LIGHT = %lighten($SECONDARY, $GRADIENT)
!$SECONDARY_TEXT = "#fefefe"
!$SUCCESS = "#00FF00"
!$SUCCESS_DARK = %darken($SUCCESS, $GRADIENT)
!$SUCCESS_LIGHT = %lighten($SUCCESS, $GRADIENT)
!$SUCCESS_TEXT = "ffffff"
!$INFO = "#0060a8"
!$INFO_DARK = %darken($INFO, $GRADIENT)
!$INFO_LIGHT = %lighten($INFO, $GRADIENT)
!$INFO_TEXT = "ffffff"
!$WARNING = "#ff8000"
!$WARNING_DARK = %darken($WARNING, $GRADIENT)
!$WARNING_LIGHT = %lighten($WARNING, $GRADIENT)
!$WARNING_TEXT = "#222222"
!$DANGER = "#ff0000"
!$DANGER_DARK = %darken($DANGER, $GRADIENT)
!$DANGER_LIGHT = %lighten($DANGER, $GRADIENT)
!$DANGER_TEXT = "ffffff"
!$LIGHT = "#fff200"
!$DARK = "#484848"
''
'' proc to highlight text in the success color
'' 
!procedure $success($msg)
  <font color=$SUCCESS><b>$msg
!endprocedure
''
'' proc to highlight text in the danger color
'' 
!procedure $failure($msg)
  <font color=$DANGER><b>$msg
!endprocedure
''
'' proc to highlight text in the warning color
'' 
!procedure $warning($msg)
  <font color=$WARNING><b>$msg
!endprocedure
''
'' proc to highlight text in the info color
'' 
!procedure $info($msg)
  <font color=$INFO><b>$msg
!endprocedure
''
'' proc to generate color scheme for primary color
'' 
!procedure $primary_scheme()
	FontColor $PRIMARY_TEXT
	BorderColor $PRIMARY_DARK
	BackgroundColor $PRIMARY_LIGHT-$PRIMARY_DARK
!endprocedure
''
'' proc to generate color scheme for secondary color
'' 
!procedure $secondary_scheme()
	FontColor $SECONDARY_TEXT
	BorderColor $SECONDARY_DARK
	BackgroundColor $SECONDARY_LIGHT-$SECONDARY_DARK
!endprocedure

skinparam  {
    defaultFontName   "Verdana"
    defaultFontSize   12
    defaultTextAlignment center
    shadowing false
    RoundCorner 10
    TitleFontSize 18
    ' TitleFontColor $PRIMARY_TEXT
}
''
'' Style settings
''
<style>
  root {
    BackgroundColor $BGCOLOR
    FontColor $PRIMARY_TEXT
    HyperLinkColor $ORANGE
    LineColor $PRIMARY_DARK
    LineThickness 1
    Margin 10
    Padding 6
    Shadowing 0.0
  }
  node {
   Padding 15
   roundcorner 20
   BackgroundColor $PRIMARY-$PRIMARY_DARK
  }
  caption {
    LineThickness 0
  }
  footer {
    LineThickness 0
  }
  groupHeader {
    BackgroundColor $SECONDARY
    FontColor $INFO
    FontStyle bold
  }
  header {
    LineThickness 0
  }
  referenceHeader {
    BackgroundColor $BGCOLOR
    FontColor $DARK
    FontStyle bold
  }
  separator {
    BackgroundColor $FGCOLOR
    FontColor $BGCOLOR
    FontStyle bold
  }
  title {
	FontSize 20
	BorderRoundCorner            8
	BorderThickness 	         1
	BackgroundColor  $SECONDARY_LIGHT-$SECONDARY
	FontColor $PRIMARY
	BorderColor $SECONDARY
  }
  nwdiagDiagram {
	network {
		$primary_scheme()    
		LineColor $PRIMARY
		LineThickness 1.0
		FontColor $PRIMARY_LIGHT
	}
	server {
		$primary_scheme()
	}
	arrow {
		FontColor $PRIMARY_LIGHT
		LineColor $PRIMARY_LIGHT
	}
	group {
		BackGroundColor $LIGHT
		LineColor $LIGHT_DARK
		LineThickness 2.0
		Margin 5
		Padding 5
	}
  }
  ganttDiagram {
	task {
		$primary_scheme()
		LineColor $PRIMARY
		Margin 10
		Padding 6
	}
	note {
		FontColor $INFO_TEXT
		LineColor $INFO_DARK
		BackGroundColor $INFO
	}
	separator {
		LineColor $SECONDARY
		BackGroundColor $SECONDARY-$SECONDARY_DARK
		FontColor $SECONDARY_TEXT
	}
	milestone {
		FontColor $INFO
		FontSize 16
		FontStyle italic
		BackGroundColor $SECONDARY
		LineColor $SECONDARY_DARK
	}
	timeline {
		BackgroundColor $SECONDARY
		FontColor $SECONDARY_TEXT
	}
	closed {
		BackgroundColor $WARNING_DARK
		FontColor $WARNING_TEXT
	}
  }
</style>
''
'' Global Default Values
''
skinparam defaultFontName       "Verdana"
skinparam defaultFontSize       12
skinparam dpi                   100
skinparam shadowing             false
skinparam roundcorner           8
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	                 $SECONDARY_TEXT
	BorderColor	                 $SECONDARY_DARK
	FontSize	    	         20
	BorderRoundCorner            8
	BorderThickness 	         1
	BackgroundColor              $SECONDARY_LIGHT-$SECONDARY
}

skinparam legend {
	BackgroundColor $PRIMARY
	BorderColor $PRIMARY_DARK
	FontColor $PRIMARY_TEXT
}

!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_DARK
  	DiamondBorderColor $SECONDARY_DARK
  	DiamondFontColor $SECONDARY_TEXT
}
!endsub

!startsub participant
skinparam participant {
	$primary_scheme()
	ParticipantBorderThickness 2
}
!endsub

!startsub actor
skinparam actor {
	$primary_scheme()
}
!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
	''
	GroupBorderColor $DARK
	GroupFontColor $DARK
	GroupHeaderFontColor $INFO
	GroupBackgroundColor $SECONDARY
	GroupBodyBackgroundColor $BGCOLOR
	GroupHeaderBackgroundColor $BGCOLOR
	''
	DividerBackgroundColor $DARK
    DividerBorderColor $DARK
    DividerBorderThickness 2
    DividerFontColor $LIGHT
	''
	ReferenceBackgroundColor $BGCOLOR
	ReferenceBorderColor $DARK
	ReferenceFontColor $SECONDARY_TEXT
	ReferenceHeaderBackgroundColor $SECONDARY
	''
	StereotypeFontColor $PRIMARY_TEXT
}
!endsub

!startsub partition
skinparam partition {
	BorderColor $PRIMARY
	FontColor $PRIMARY_LIGHT
	BackgroundColor $BGCOLOR
}
!endsub

!startsub collections
skinparam collections {
	$primary_scheme()
}
!endsub

!startsub control
skinparam control {
	$primary_scheme()
}
!endsub

!startsub entity
skinparam entity {
	$primary_scheme()
}
!endsub

!startsub boundary
skinparam boundary {
	$primary_scheme()
}
!endsub

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

!startsub note
skinparam note {
	BorderThickness 1
	BackgroundColor $INFO
	BorderColor $INFO_DARK
	FontColor $INFO_TEXT
}
!endsub

!startsub artifact
skinparam artifact {
	BackgroundColor $SECONDARY_LIGHT-$SECONDARY_DARK
	BorderColor $LIGHT
	FontColor $LIGHT
}
!endsub

!startsub component
skinparam component {
	$primary_scheme()
}
!endsub

!startsub interface
skinparam interface {
	BackgroundColor  $DANGER_DARK
	BorderColor  $DANGER
	FontColor $DARK
}
!endsub

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

!startsub node
skinparam node {
	BackgroundColor $BGCOLOR
	BorderColor $PRIMARY_LIGHT
	FontColor $PRIMARY_TEXT
}
!endsub

!startsub cloud
skinparam cloud {
	BackgroundColor transparent
	BorderColor $PRIMARY_LIGHT
	FontColor $LIGHT
}
!endsub

!startsub database
skinparam database {
	$primary_scheme()
	BackgroundColor  $BGCOLOR
}
!endsub

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

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

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

!startsub rectangle
skinparam rectangle {
	$primary_scheme()
	BackgroundColor $BGCOLOR
	BorderThickness 2
	StereotypeFontColor $PRIMARY
}
!endsub

!startsub package
skinparam package {
	$primary_scheme()
	BackgroundColor $BGCOLOR
	BorderThickness 2
}
!endsub

!startsub folder
skinparam folder {
	BackgroundColor $SECONDARY_LIGHT
  	BorderColor $WARNING
	FontColor $WARNING
	BorderThickness 2
}
!endsub

!startsub frame
skinparam frame {
	BackgroundColor $SECONDARY_LIGHT
  	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_DARK
	BorderColor $INFO_DARK
	FontColor $INFO_TEXT
}
!endsub

!startsub file
skinparam file {
	BackgroundColor $SECONDARY_LIGHT-$SECONDARY_DARK
	BorderColor $INFO
	FontColor $SECONDARY_TEXT
}
!endsub

!startsub stack
skinparam stack {
	$primary_scheme()
}
!endsub

!if %variable_exists("NEWSTYLE")
<>
wbsDiagram {
    LineColor $PRIMARY
    BorderThickness 3
    BackgroundColor $LIGHT
    FontColor $PRIMARY_TEXT
    :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
    }

}
</>
!endif
