''
'' lightgray theme - mostly grays
''
'' Author: Brett Schwarz
'' Copyright (c) 2019 by Brett Schwarz

!$THEME = "lightgray"

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

skinparam backgroundColor $BGCOLOR
skinparam useBetaStyle false

!$WHITE = "#FFF"
!$GRAY_DARK = "#4d4d4d"
!$GRAY = "#737373"
!$LIGHT = "#fcfcfc"
!$DARK = "#303030"

'' *_LIGHT = tint (lighter) of the main color of 80%
''          where TINT is calculated by clr + (255-clr) * tint_factor
'' *_DARK = shade (darker) of the main color of 80%
''          and SHADE is calculated by clr * (1 - shade_factor)
''
!$FGCOLOR = $DARK
!$PRIMARY = "#e2e2e2"
!$PRIMARY_LIGHT = "#f3f3f3"
!$PRIMARY_DARK = "#888888"
!$PRIMARY_TEXT = "#336699"
!$SECONDARY = "#d2d2d2"
!$SECONDARY_LIGHT = "#dbdbdb"
!$SECONDARY_DARK = "#a8a8a8"
!$SECONDARY_TEXT = "white"
!$INFO = "#336699"
!$INFO_LIGHT = "#5c85ad"
!$INFO_DARK = "#29527a"
!$INFO_TEXT = $WHITE
!$SUCCESS = "#339933"
!$SUCCESS_LIGHT = "#5cad5c"
!$SUCCESS_DARK = "#297a29"
!$SUCCESS_TEXT = $WHITE
!$WARNING = "#ffae42"
!$WARNING_LIGHT = "#ffbe68"
!$WARNING_DARK = "#cc8b35"
!$WARNING_TEXT = $WHITE
!$DANGER = "#ff3333"
!$DANGER_LIGHT = "#ff5c5c"
!$DANGER_DARK = "#cc2929"
!$DANGER_TEXT = $WHITE

!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
''
'' 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_DARK
	}
	server {
		$primary_scheme()
	}
	arrow {
		FontColor $PRIMARY_DARK
		LineColor $PRIMARY_DARK
	}
	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            15
skinparam ParticipantPadding     30
skinparam BoxPadding             30
skinparam Padding                10
skinparam ArrowColor             $GRAY
skinparam stereotype {
    CBackgroundColor $SECONDARY_LIGHT
    CBorderColor $SECONDARY_DARK
    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
	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-$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 $SECONDARY_TEXT
	BackgroundColor $BGCOLOR
	StartColor $PRIMARY
	EndColor $PRIMARY
	''
	BoxBackgroundColor $LIGHT
	BoxBorderColor $GRAY
	BoxFontColor $DARK
	''
	DelayFontColor $DARK
	''
	LifeLineBorderColor $SECONDARY_DARK
	LifeLineBorderThickness 2
	LifeLineBackgroundColor $SECONDARY_LIGHT
	''
	GroupBorderColor $GRAY
	GroupFontColor $DARK
	GroupHeaderFontColor $INFO
	''
	DividerBackgroundColor $WHITE-$LIGHT
    DividerBorderColor $GRAY
    DividerBorderThickness 2
    DividerFontColor $DARK
	''
	ReferenceBackgroundColor $BGCOLOR
	ReferenceBorderColor $GRAY
	ReferenceFontColor $DARK
	ReferenceHeaderFontColor $INFO
	''
	StereotypeFontColor $PRIMARY_TEXT
}
!endsub

!startsub partition

skinparam partition {
	BorderColor $PRIMARY
	FontColor $PRIMARY_DARK
	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 #orange
	BorderColor #999999
	FontColor #333333
}
!endsub

!startsub note

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

!startsub artifact

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

!startsub component

skinparam component {
	$primary_scheme()
}
!endsub

!startsub interface

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

!startsub storage

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

!startsub node

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

!startsub cloud

skinparam cloud {
	BackgroundColor #F2FCFE-#eeeeee
	BorderColor $F2FCFE
	FontColor $PRIMARY_TEXT
}
!endsub

!startsub database

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

!startsub class

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

!startsub object

skinparam object {
	$primary_scheme()
	StereotypeFontColor $LIGHT
	BorderThickness 1
	AttributeFontColor $DARK
	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 $PRIMARY_LIGHT
  	BorderColor $WARNING
	FontColor $WARNING
	BorderThickness 2
}
!endsub

!startsub frame

skinparam frame {
	BackgroundColor $PRIMARY_LIGHT
  	BorderColor $INFO
	FontColor $INFO
	BorderThickness 2
}
!endsub

!startsub state

skinparam state {
	$primary_scheme()
	BorderColor $PRIMARY_DARK
	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
	FontColor $INFO_TEXT
}
!endsub

!startsub file

skinparam file {
	BackgroundColor $SECONDARY_LIGHT-$SECONDARY
	BorderColor $SECONDARY_DARK
	FontColor $SECONDARY_TEXT

}
!endsub

!startsub stack

skinparam stack {
	$primary_scheme()
}
!endsub