Move writeError to api.go

Web interface now uses error HTML template instead.
web: add a nicer error page
web: set better defaults for translation form
web: add "Detect language" option
Add description meta tag
Update description
web: add placeholder for translation field
web: don't run translation on empty text

This was causing an error when submitting nothing.
Update layout to a more "traditional" form

Instead of using one column layout, it's now switched to two column
layout with source on one side and translation on the other side.

One column layout is still used on smaller screens.
Update example in README

Just making it clear where --{templates,static}-dir should point to
Update link formatting in README

Instead of inline links [...](), placeholder links [...][...] are used.
api: use fmt.Fprint/Fprintln

Honestly I didn't know it existed at the time of writing gtranslate :)
web, api: terminate request on parse error

When a parser error occurs, the request is not terminated which causes
the HTML page to be dumped after the error message.
Add dark theme

It uses prefers-color-scheme CSS @media selector to determine which
theme is used.

Support table: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme#browser_compatibility
Web UI redesign

* Fixed up max-width
  Instead of using relative metric like 90rem, switched over to
  pixels. This also decreases the section so my browser won't struggle
  as much with it.
* Added proper outline
  Instead of using browser's default, I declare blue-ish outline
* Add borders to elements
  Inspired by Sourcehut.
readme: language selector is done
bf49f944 — Kyle Anthony Williams 8 months ago
Use <select> for language selection
Rename template-dir to templates-dir

Plural makes more sense as there are multiple templates.
readme: only email