@startuml

!if (%not(%variable_exists("$FONTNAME")))
!$FONTNAME = "Verdana"
!endif

!if (%not(%variable_exists("$FONTSIZE")))
!$FONTSIZE = 11
!endif

!ifdef DARKBLUE
skinparam backgroundColor 777
!$ACCENT = "1a66c2"
!$ACCENTDARK = "002642"
skinparam stereotypeCBackgroundColor $ACCENT
!define DARKSTYLE
!endif

!ifdef LIGHTBLUE
!$ACCENT = "2a86e2"
!$ACCENTDARK = "1a66c2"
skinparam stereotypeCBackgroundColor $ACCENTDARK
!define LIGHTSTYLE
!endif

!ifdef DARKRED
!$ACCENT = "880000"
!$ACCENTDARK = "330000"
skinparam stereotypeCBackgroundColor $ACCENT
!define DARKSTYLE
!endif

!ifdef LIGHTRED
!$ACCENT = "CC0033"
!$ACCENTDARK = "AA0033"
skinparam stereotypeCBackgroundColor $ACCENTDARK
!define LIGHTSTYLE
!endif

!ifdef DARKGREEN
!$ACCENT = "228811"
!$ACCENTDARK = "113300"
skinparam stereotypeCBackgroundColor $ACCENT
!define DARKSTYLE
!endif

!ifdef LIGHTGREEN
!$ACCENT = "55BB33"
!$ACCENTDARK = "338822"
skinparam stereotypeCBackgroundColor $ACCENTDARK
!define LIGHTSTYLE
!endif

!ifdef DARKORANGE
!$ACCENT = "BB6600"
!$ACCENTDARK = "662200"
skinparam stereotypeCBackgroundColor $ACCENT
!define DARKSTYLE
!endif

!ifdef LIGHTORANGE
!$ACCENT = "FF8800"
!$ACCENTDARK = "BB6600"
skinparam stereotypeCBackgroundColor $ACCENT
!define LIGHTSTYLE
!endif

!ifdef LIGHTSTYLE
!$PRIMARYFONTCOLOR = "000"
!$SECONDARY = "333"
!$ARROWCOLOR = "000"
!$ARROWFONTCOLOR = "333"
!$BORDERCOLOR = "aaa"
!$BOXBG = "ccc"
!$LIGHTBORDERCOLOR = "cccccc"
!$LIGHTBG = "e0e0e0"
skinparam backgroundColor fff
!endif

!ifdef DARKSTYLE
!$PRIMARYFONTCOLOR = "fff"
!$SECONDARY = "aaa"
!$ARROWCOLOR = "fff"
!$ARROWFONTCOLOR = "bbb"
!$BORDERCOLOR = "1b1b1b"
!$BOXBG = "2e2e2e"
!$LIGHTBORDERCOLOR = "767676"
!$LIGHTBG = "575757"
skinparam backgroundColor 777
!endif

!procedure font_style()
  fontColor $PRIMARYFONTCOLOR
  fontName $FONTNAME
  fontSize $FONTSIZE
  stereotypeFontColor $SECONDARY
  stereotypeFontSize $FONTSIZE
!endprocedure

!procedure basic_style()
  backgroundColor $BOXBG
  borderColor $BORDERCOLOR
!endprocedure

!procedure light_style()
  backgroundColor $LIGHTBG
  borderColor $LIGHTBORDERCOLOR
!endprocedure

!procedure accent_style()
  backgroundColor $ACCENT
  borderColor $ACCENTDARK
!endprocedure

!procedure arrow_style()
  arrowColor $ARROWCOLOR
  arrowFontName $FONTNAME
  arrowFontColor $ARROWFONTCOLOR
  arrowFontSize $FONTSIZE
!endprocedure

' Class diagrams

skinparam circledCharacter {
  radius 8
  fontSize $FONTSIZE
  fontName $FONTNAME
}

skinparam class {
  basic_style()
  font_style()
  arrow_style()

  attributeFontColor $SECONDARY
  attributeFontSize $FONTSIZE
  attributeIconSize $FONTSIZE
}

' Sequence diagrams

skinparam actor {
  accent_style()
  font_style()
}

skinparam participant {
  basic_style()
  font_style()
}

skinparam collections {
  basic_style()
  font_style()
}

skinparam SequenceBox{
  light_style()
  font_style()
}

' Component diagrams

skinparam interface {
  accent_style()
  font_style()
}

skinparam component {
  basic_style()
  font_style()
}

skinparam node {
  basic_style()
  font_style()
}

skinparam database {
  basic_style()
  font_style()
}

skinparam queue {
  basic_style()
  font_style()
}

' Use Case diagrams

skinparam usecase {
  basic_style()
  font_style()
  arrow_style()
}

skinparam activity {
  basic_style()
  font_style()
  arrow_style()
}

skinparam sequence {
  font_style()
  arrow_style()

  lifeLineBorderColor $ACCENT
  lifeLineBackgroundColor $LIGHTBG
}

skinparam boundary {
  accent_style()
  font_style()
}

skinparam control {
  accent_style()
  font_style()
}

skinparam entity {
  accent_style()
  font_style()
}

' State diagrams

skinparam state {
  basic_style()
  font_style()
  arrow_style()
  startColor $ACCENT
  endColor $ACCENTDARK
}

' Object diagrams

skinparam object {
  basic_style()
  font_style()
  arrow_style()

  attributeFontColor $SECONDARY
  attributeFontName $FONTNAME
  attributeFontSize $FONTSIZE
}

' Common

skinparam note {
  accent_style()
  font_style()
}

skinparam cloud {
  basic_style()
  font_style()
  arrow_style()
}

skinparam rectangle {
  basic_style()
  font_style()
}

skinparam storage {
  basic_style()
  font_style()
}

@enduml
