Pixel-art decoration for the seasons and the celebrations of the year. The banner is placed in
region.main.before, inside the normal flow of the main column, so it cannot cover a topic, a form or a button. A small
sprite chip joins the footer, and an optional full-page layer adds drifting pixel sprites and twinkling dots behind the
page (never above it).

What it shows

SceneWindow
Tết Nguyên Đán7 days before to 5 days after lunar New Year
Valentine's Day7–15 February
International Women's Day1–9 March
Reunification & Labour Day28 April – 2 May
Children's Day28 May – 2 June
Mid-Autumn Festival7 days before to 1 day after the 15th of the 8th lunar month
Vietnamese Women's Day15–21 October
Halloween24 October – 1 November
Vietnamese Teachers' Day15–21 November
Christmas20–27 December
New Year28 December – 3 January
Spring / Summer / Autumn / WinterFebruary–April / May–July / August–October / November–January

The first active celebration wins, so Tết stays on screen when its window overlaps Valentine's Day. When no
celebration is active, the banner falls back to the season. Each scene has its own accent colour, greeting and five
pixel sprites; the banner shows the actual window dates, the time left (optional) and a status pill.

The lunar dates for Tết and Mid-Autumn live in tabre_seasons_lunar_dates() and cover 2025–2040. After that the plugin
falls back to the seasons; add more years to the table to extend the lunar scenes.

Dates are evaluated at local noon in Vietnam time (Asia/Ho_Chi_Minh); if the site sets site_tz to another
non-UTC zone, that zone is used instead. (UTC itself falls back to Vietnam time, otherwise the scene would change at
07:00 for Vietnamese readers.)

Settings

SettingMeaning
EnabledMaster switch, on by default.
BannerShow the banner above the main column.
Footer chipShow the small sprite + scene name in the footer.
Ambient effectOff, a full-page layer of drifting sprites and twinkling dots behind the content (default), or two side rails that keep the visible sprites in the page gutters. It follows the same scenes and quiet paths as the banner, but ignores Pages so it runs across the public site.
PagesEvery content page (default), the home page and listing pages, or the home page only. Admin, account, settings, editor, review, notification and machine endpoints are always excluded.
ModeAutomatic by date, or a scene chosen by hand. A manual scene outside its window is shown with a Preview pill and its next dates.
SceneThe scene for manual mode (Automatic also works there).
Days leftShow “In 6 days” / “2 days left” beside the dates.
Custom messageReplaces the scene's greeting; leave empty for the default.

Notes

  • No JavaScript and no database. The CSS is bundled with the other plugins; the art is 30 small PNGs served from
    plugins/tabre_seasons/assets/art/ with image-rendering: pixelated.
  • The ambient layer is a single fixed element appended before </body> at z-index: -1 with pointer-events: none
    and aria-hidden="true". It paints behind the glass panels, so text and controls always sit above it. It carries
    three kinds of element: soft colour glows (260–480px, always, on every screen size), small crisp sprites and
    twinkling dots. Edge mode adds rails sized from the gap between the 1280px container and the viewport, so those
    sprites stay in the page padding; the rails are hidden below 1360px, where there is no room for one, and the
    glows keep the page decorated there.
  • Motion: the five sprites rise once on page load, then the ambient layer drifts (15–36s per pass) with twinkling
    dots. Under prefers-reduced-motion: reduce the sprites and dots are dropped and the glows rest in place, so the
    scene is still coloured without moving; in print the layer is removed. On phones the background layer drops to
    six sprites, no dots and four glows.
  • The footer chip and the ambient layer are decorative and hidden from assistive technology; the banner announces the
    scene and its status.

Art credit

Pixel sprites come from the purchased Free Icon Pack v3.1 (Basic) by gvesster,
used under its license (commercial use allowed; the icons are not claimed, resold or repackaged as an icon pack).
The pack itself is never served by the forum; only the 30 sprites referenced by this plugin are copied into
assets/art/.

Uninstall

Disable removes the banner, the footer chip and the ambient layer. Nothing is stored in the database.