Styles
======
The frontend leans heavily on `UIkit `_ for
layout and components. Project styles add a thin layer of
brand-specific helpers, layout glue, and a handful of UIkit
overrides. Everything lives in
``app/richy/core/static/sass/`` and compiles via Webpack into
``static/css/app_build.css``, loaded by ``core/_js_css.pug``.
Source layout
-------------
``app.sass`` is the entry point. It ``@use``-s seven partials
in order and declares the global utility classes.
* ``_meter.sass`` -- ``.meter`` (HTML ````) layout, with
``.min`` / ``.max`` labels and a ``.with-prefix`` two-column
variant.
* ``_dashboard.sass`` -- ``.dashboard-performance-chart``
desktop-only max-width.
* ``_loading.sass`` -- ``.loading`` spinner (CSS ``@keyframes``
rotation), with an ``.in-container`` absolute-centered
variant.
* ``_chart.sass`` -- ``.chart`` set to ``position: relative``
so absolute-positioned chart overlays anchor correctly.
* ``_badge.sass`` -- ``.richy-dual-badge`` two-tone label badge.
* ``_basic_info.sass`` -- ``.basic-info table th`` padding
tweak.
* ``_overrides.sass`` -- UIkit class overrides (see
`UIkit overrides`_ below).
Project-wide utility classes
----------------------------
Declared directly in ``app.sass``. Reference them from any
template or template tag without needing a ``@use``.
* ``.richy-green`` / ``.richy-red`` -- brand "up" / "down"
colors (``#00C853`` / ``#EF476F``). Emitted by template tags
such as :func:`~richy.core.templatetags.items.move_arrow` and
:func:`~richy.core.templatetags.items.color_perc_change`.
* ``.richy-sidebar-left`` -- 300px fixed-width left sidebar on
desktop; pairs with a ``margin-left: 300px`` rule on ``main``
for the content offset (``@media(min-width: 960px)``).
* ``.richy-flex-gap`` -- ``gap: 15px`` for flex containers.
* ``.richy-hand`` -- ``cursor: pointer``.
UIkit overrides
---------------
``_overrides.sass`` carries the small set of overrides applied
to UIkit classes -- heading font-weight, navbar background
color (the ``$primary`` brand blue ``#1e87f0``), label sizing,
table font-size, ``a.uk-card-badge`` hover state. These are
intentionally narrow; project styles should not fork UIkit
components, just nudge their defaults.
Build pipeline
--------------
SASS sources compile through Webpack alongside Vue components
(see :doc:`components/index`). The output is
``app/richy/static/css/app_build.css``; ``core/_js_css.pug``
loads it next to UIkit's stylesheet and the Bootstrap Icons
font. See :doc:`/architecture/frontend` for the full build
toolchain.