Design
======

The boot screens follow grommunio-web's login page
(client/resources/css/external/login.css):

* background: linear-gradient(150deg, #009FFD, #2a2a72) with the white 7%
  ribbon overlay (login-overlay.svg) and the radial highlight at the
  bottom-right corner (bootback.png, 1920x1080, cover-scaled)
* the white 20px-radius card (#ffffff, shadow rgba(16,24,40,.26)), 440px
  wide in GRUB and 400px in Plymouth, with the 220px grommunio-logo.svg
* text #1d2939, muted text #667085, fields #eef0f3, primary #009FFD
* the selected boot entry is the 44px, 10px-radius "Sign in" button
* the countdown is an 8px pill (#eef0f3 track, #009FFD fill), in Plymouth
  the boot progress fills it

Regenerating the artwork
========================

gr1-artwork.tar.xz holds the rendered PNGs (grub/ and plymouth/). Rebuild it
with the scripts in this directory (python3-Pillow, python3-gobject, librsvg):

  python3 mkassets.py out          # reads grommunio-logo.svg, login-overlay.svg
  tar -C out -cJf gr1-artwork.tar.xz grub plymouth

The grub theme fonts (DejaVu Sans 10/12, DejaVu Sans Bold 14 and DejaVu Sans
Mono 12 as ascii.pf2) are rendered with grub2-mkfont at package build time.

GRUB gfxmenu rules the theme depends on (grub-core/gfxmenu of grub 2.12)
==========================================================================

* A component is never drawn smaller than its content (gui_canvas.c), so
  every image is shipped at exactly the size it is drawn at. A 605px logo
  with "width = 300" in theme.txt is drawn at 605px and clipped on small
  screens; do not try to scale images down in theme.txt.
* The slices of selected_item_pixmap_style are drawn as top/bottom padding
  around the row (gui_list.c draw_menu), which moves the selected text down
  by the slice height and lets the box overlap the next row. item_*.png are
  therefore transparent copies with the same slice sizes, and item_spacing
  covers 2 x 10px of pill padding plus the visible gap.
* A progress_bar is never smaller than 200x28px (gui_progress_bar.c), so the
  8px countdown pill sits in 28px-tall pixmaps with transparent padding.
* The canvas paints components in reverse order of declaration: anything that
  overlaps the boot_menu (countdown, label) must be declared before it.
* grub2 ignores PNG tRNS and rejects palette/greyscale images: every PNG must
  be RGBA8888 (mkassets.py writes them that way; with optipng use -nc).

Fonts
=====

KIWI generates the install media's grub.cfg from its own template and loads
only ascii.pf2, DejaVuSans10.pf2, DejaVuSans12.pf2 and DejaVuSans-Bold14.pf2
from the theme directory (kiwi/bootloader/template/grub2.py); an installed
system's 00_header loads every *.pf2 of the theme directory. The theme only
uses fonts that exist under those four names so the install media and the
installed system render the same.

Plymouth
========

main.script uses only script-module calls of plymouth 22.02 (Image.Scale/
Crop, Sprite.SetImage/SetX/SetY/SetZ, Window.*). No text is drawn because the
appliance does not ship plymouth-plugin-label.
