docs: @Override protected void initGraphics() {
          super.initGraphics();
  
          if (tile.isAutoScale()) tile.calcAutoScale();
          minValue             = tile.getMinValue();
          range                = tile.getRange();
          angleStep            = ANGLE_RANGE / range;
          sectionsVisible      = tile.getSectionsVisible();
          sections             = tile.getSections();
          formatString         = new StringBuilder("%.").append(Integer.toString(tile.getDecimals())).append("f").toString();
          locale               = tile.getLocale();
          currentValueListener = o -> setBar(tile.getCurrentValue());
  
          graphicListener      = (o, ov, nv) -> { if (nv != null) { graphicContainer.getChildren().setAll(tile.getGraphic()); }};
  
          titleText = new Text();
          titleText.setFill(tile.getTitleColor());
          enableNode(titleText, !tile.getTitle().isEmpty());
  
          text = new Text(tile.getText());
          text.setFill(tile.getTextColor());
          enableNode(text, tile.isTextVisible());
  
          barBackground = new Arc(PREFERRED_WIDTH * 0.5, PREFERRED_HEIGHT * 0.5, PREFERRED_WIDTH * 0.468, PREFERRED_HEIGHT * 0.468, 90, 360);
          barBackground.setType(ArcType.OPEN);
          barBackground.setStroke(tile.getBarBackgroundColor());
          barBackground.setStrokeWidth(PREFERRED_WIDTH * 0.1);
          barBackground.setStrokeLineCap(StrokeLineCap.BUTT);
          barBackground.setFill(null);
  
          bar = new Arc(PREFERRED_WIDTH * 0.5, PREFERRED_HEIGHT * 0.5, PREFERRED_WIDTH * 0.468, PREFERRED_HEIGHT * 0.468, 90, 0);
          bar.setType(ArcType.OPEN);
          bar.setStroke(tile.getBarColor());
          bar.setStrokeWidth(PREFERRED_WIDTH * 0.1);
          bar.setStrokeLineCap(StrokeLineCap.BUTT);
          bar.setFill(null);
  
          separator = new Line(PREFERRED_WIDTH * 0.5, 1, PREFERRED_WIDTH * 0.5, 0.16667 * PREFERRED_HEIGHT);
          separator.setStroke(tile.getBackgroundColor());
          separator.setFill(Color.TRANSPARENT);
  
          percentageValueText = new Text(String.format(locale, formatString, tile.getCurrentValue()));
          percentageValueText.setFont(Fonts.latoRegular(PREFERRED_WIDTH * 0.27333));
          percentageValueText.setFill(tile.getValueColor());
          percentageValueText.setTextOrigin(VPos.CENTER);
  
          percentageUnitText = new Text(tile.getUnit());
          percentageUnitText = new Text("\u0025");
          percentageUnitText.setFont(Fonts.latoLight(PREFERRED_WIDTH * 0.08));
          percentageUnitText.setFill(tile.getUnitColor());
  
          percentageFlow = new TextFlow(percentageValueText, percentageUnitText);
          percentageFlow.setTextAlignment(TextAlignment.CENTER);
  
          valueText = new Text(String.format(locale, formatString, tile.getCurrentValue()));
          valueText.setFont(Fonts.latoRegular(PREFERRED_WIDTH * 0.27333));
          valueText.setFill(tile.getValueColor());
          valueText.setTextOrigin(VPos.CENTER);
          enableNode(valueText, tile.isValueVisible());
  
          unitText = new Text(tile.getUnit());
          unitText = new Text("\u0025");
          unitText.setFont(Fonts.latoLight(PREFERRED_WIDTH * 0.08));
          unitText.setFill(tile.getUnitColor());
          enableNode(unitText, !tile.getUnit().isEmpty());
  
          valueUnitFlow = new TextFlow(valueText, unitText);
          valueUnitFlow.setTextAlignment(TextAlignment.CENTER);
  
          graphicContainer = new StackPane();
          graphicContainer.setMinSize(size * 0.9, tile.isTextVisible() ? size * 0.72 : size * 0.795);
          graphicContainer.setMaxSize(size * 0.9, tile.isTextVisible() ? size * 0.72 : size * 0.795);
          graphicContainer.setPrefSize(size * 0.9, tile.isTextVisible() ? size * 0.72 : size * 0.795);
          if (null == tile.getGraphic()) {
              enableNode(graphicContainer, false);
          } else {
              graphicContainer.getChildren().setAll(tile.getGraphic());
          }
  
          getPane().getChildren().addAll(barBackground, bar, separator, titleText, text, graphicContainer, percentageFlow, valueUnitFlow);
      }