<feed xmlns='http://www.w3.org/2005/Atom'>
<title>luci/themes, branch master</title>
<subtitle>Lua Configuration Interface (mirror)</subtitle>
<id>https://git.openwrt.org/project/luci/atom?h=master</id>
<link rel='self' href='https://git.openwrt.org/project/luci/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/'/>
<updated>2026-09-27T16:42:14Z</updated>
<entry>
<title>treewide: sync translations</title>
<updated>2026-09-27T16:42:14Z</updated>
<author>
<name>Hannu Nyman</name>
</author>
<published>2026-09-27T16:42:14Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=05dc750ddb5e5c4aacf4ae0635bbf8b14a494909'/>
<id>urn:sha1:05dc750ddb5e5c4aacf4ae0635bbf8b14a494909</id>
<content type='text'>
Sync.

Signed-off-by: Hannu Nyman &lt;hannu.nyman@iki.fi&gt;
</content>
</entry>
<entry>
<title>luci-theme-footstrap: sync with release 0.14.13</title>
<updated>2026-09-20T11:32:55Z</updated>
<author>
<name>Ivan Kvashonkin</name>
</author>
<published>2026-09-18T22:06:03Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=c8a49e1947971291dd3acc17a9356acf03941b3b'/>
<id>urn:sha1:c8a49e1947971291dd3acc17a9356acf03941b3b</id>
<content type='text'>
Appearance becomes a page of its own under System, replacing the tab
the theme stapled onto luci-mod-system's form, and the reader's scroll
position now survives a poll refill on every engine, Back included.
Adds a fifth colourway, a movable content-width cap, Overview cards
that collapse from the keyboard and meters that colour by their own
reading. The wallpaper uploads move out of fs-prefs.js into their own
module and the SVG sanitiser is hardened; the pattern is now served by
a CGI handler with CSP 'none', sandbox and nosniff rather than a /www
symlink a browser will run as a document. postinst and postrm no
longer call `rpcd reload`, which could permanently drop an unrelated
rpcd plugin.

Signed-off-by: Ivan Kvashonkin &lt;vizzlef@gmail.com&gt;
</content>
</entry>
<entry>
<title>luci-theme-openwrt-2020: Revert "use lighter color for checkboxes"</title>
<updated>2026-09-14T18:09:21Z</updated>
<author>
<name>Hannu Nyman</name>
</author>
<published>2026-09-14T18:09:21Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=d19bf1358fa6f689731e420724df7918880be05a'/>
<id>urn:sha1:d19bf1358fa6f689731e420724df7918880be05a</id>
<content type='text'>
This reverts commit 62382556d713725a13d2d322e21ed332deb1799c.

The commit removed the visible checkmark from the default light mode.

Signed-off-by: Hannu Nyman &lt;hannu.nyman@iki.fi&gt;
</content>
</entry>
<entry>
<title>luci-theme-material: fix dark-light manual switching</title>
<updated>2026-09-14T17:30:24Z</updated>
<author>
<name>Alexey Zagorodnikov</name>
</author>
<published>2026-06-22T14:23:49Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=4e23ae592dc2cba2863b8561999fd85d2f45ee22'/>
<id>urn:sha1:4e23ae592dc2cba2863b8561999fd85d2f45ee22</id>
<content type='text'>
Added a symlinks for material-light and material-dark.

Signed-off-by: Alexey Zagorodnikov &lt;xglooom@gmail.com&gt;
</content>
</entry>
<entry>
<title>luci-theme-openwrt-2020: use lighter color for checkboxes</title>
<updated>2026-09-05T15:16:34Z</updated>
<author>
<name>Michael Pratt</name>
</author>
<published>2026-08-22T17:46:06Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=62382556d713725a13d2d322e21ed332deb1799c'/>
<id>urn:sha1:62382556d713725a13d2d322e21ed332deb1799c</id>
<content type='text'>
When using browser extensions for automatic dark mode on pages,
the background is made too dark to see whether or not
the checkboxes are being toggled or their current state.

Use the brighter blue color for the check in the checkbox
which is suitable for either view as a light mode or dark mode,
and also makes the color of the check match the progress bar color.

This color change also affects "radio buttons"
which likely have the same problem as checkboxes,
although there are almost no "radio buttons" in LuCI at all.

Signed-off-by: Michael Pratt &lt;mcpratt@pm.me&gt;
</content>
</entry>
<entry>
<title>treewide: sync translations</title>
<updated>2026-08-30T17:26:59Z</updated>
<author>
<name>Hannu Nyman</name>
</author>
<published>2026-08-30T17:26:59Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=6e1eb21fae71304965621cc7df93259a18a3a93e'/>
<id>urn:sha1:6e1eb21fae71304965621cc7df93259a18a3a93e</id>
<content type='text'>
Sync translations.

Signed-off-by: Hannu Nyman &lt;hannu.nyman@iki.fi&gt;
</content>
</entry>
<entry>
<title>luci-theme-footstrap: drop the exports nothing in the tree calls</title>
<updated>2026-08-29T15:49:01Z</updated>
<author>
<name>Ivan Kvashonkin</name>
</author>
<published>2026-08-26T05:12:55Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=8e3e7618b2efed2fb1d73d25517f13621bab6650'/>
<id>urn:sha1:8e3e7618b2efed2fb1d73d25517f13621bab6650</id>
<content type='text'>
Five module exports were listed for one reason: a gate in the theme's own
repository calls them. `fs-fit.restAt()` tells that repository's scroll sweep
that the theme has taken its reference at the offset it parked at, and
`fs-router`'s contractBreaks/clearViewIntervals/sessionExpired and
`fs-chrome.columnWidth()` do the same for its unit and layout checks.

No code here calls any of them, and none of them is part of what a theme
offers a view. The functions stay where they were -- each is used inside its
own module -- and only the export line goes, so the surface a module presents
is the one this tree actually uses.

Signed-off-by: Ivan Kvashonkin &lt;vizzlef@gmail.com&gt;
</content>
</entry>
<entry>
<title>luci-theme-footstrap: put the settings tab back after a map redraw</title>
<updated>2026-08-29T15:49:01Z</updated>
<author>
<name>Ivan Kvashonkin</name>
</author>
<published>2026-08-26T05:12:55Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=ac947ca2d89271dba0590b20799be2d5bb51c94d'/>
<id>urn:sha1:ac947ca2d89271dba0590b20799be2d5bb51c94d</id>
<content type='text'>
Saving on System -&gt; System redraws the map: the old tab group goes, a
new one
is built, and ui.tabs marks it ready by setting an attribute. The theme's
observer watched childList only, so when that attribute landed after the
last
change to the group's children, the mount had already returned with no
group
to attach to and nothing woke it again -- the tab was missing until the
next
navigation.

Reported on 25.12.5 from Chrome and from iOS as "sometimes it disappears
after
Save" (openwrt/luci#8903). Modelled as a deterministic race: remove the
pane,
drop data-initialized, restore it 400ms later with no other mutation. Three
failures out of three before, three passes out of three after, on 25.12 and
24.10. The observer now watches that attribute, and a miss retries on a
widening delay, since the attribute alone would still rely on ui.tabs
setting
it that way.

The sliders on that tab also drop a calcunits option they passed to
ui.RangeSlider: the widget renders that span only when a calculate function
produced a value, and no axis here passes one.

Signed-off-by: Ivan Kvashonkin &lt;vizzlef@gmail.com&gt;
</content>
</entry>
<entry>
<title>luci-theme-footstrap: fix the login page heading and the graph labels</title>
<updated>2026-08-29T15:49:01Z</updated>
<author>
<name>Ivan Kvashonkin</name>
</author>
<published>2026-08-26T05:12:54Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=47471e1b4be3efa79c3dfddd213737acc78a6a00'/>
<id>urn:sha1:47471e1b4be3efa79c3dfddd213737acc78a6a00</id>
<content type='text'>
The login page renders with no chrome, so the h1 header.ut prints never
reaches it: the document went out with "Authorization Required" as an h2
and
no h1 at all. Its card heading is the page title and is marked up as
one, at
the h2's size -- an h1's 26px wraps that string onto two lines in a 400px
card, and the size was never what was wrong.

The card also prints the hostname it belongs to, from the same
`ubus system board` call and with the same escaping the chrome's
wordmark and
&lt;title&gt; already use. It discloses nothing new: that string has always
reached
an unauthenticated browser through &lt;title&gt;. Requested as openwrt/luci#8961.

Separately, every &lt;text&gt; that luci-mod-status's realtime .svg files draw
for
an axis carries an inline light grey with a one-pixel black halo, meant for
the black background those files assume rather than for the panel a theme
paints behind them: 1.16:1 on a light palette, where the numbers are
legible
only as the shadow around them. They take the theme's text colour now --
17.9:1 light, 14.7:1 dark, where the halo is what has to go instead.

The selector is a child combinator on purpose. Status -&gt; Channel Analysis
derives a colour per BSSID and paints both the curve and its SSID label
with
it, so there the inline fill is the only thing tying a label to its
curve --
and those labels are built inside a &lt;g&gt;, while the axis labels are direct
children of the &lt;svg&gt;. Verified by planting one label of each shape: the
SSID
label keeps its colour and halo, the axis label reads the theme's text
colour
without one.

The note beside the hostname is corrected in the same pass: it still called
the card's heading an h2, which made its own argument read backwards.

Signed-off-by: Ivan Kvashonkin &lt;vizzlef@gmail.com&gt;
</content>
</entry>
<entry>
<title>luci-theme-footstrap: fix spacing and hiding on luci-base classes</title>
<updated>2026-08-29T15:49:01Z</updated>
<author>
<name>Ivan Kvashonkin</name>
</author>
<published>2026-08-26T05:12:53Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/luci/commit/?id=4804fbe8638f12a4e64816bb3315bbea827dff6a'/>
<id>urn:sha1:4804fbe8638f12a4e64816bb3315bbea827dff6a</id>
<content type='text'>
Four things reported on one page each and fixed on the class rather than on
the page they were seen on:

  * a block a view builds itself fused with the card below it. A view may
    return a bare widget where a section is expected -- luci-app-irqbalance
    does, for its /proc/interrupts snapshot -- and nothing gave that
    block the
    gap a section carries. The rule is written against what a map contains:
    everything luci-base puts there and spaces itself is excluded, an empty
    placeholder is left alone, and any other top-level block gets a card's
    16px;
  * a meter's value sat on its own label once its column became a card
    (luci-mod-dashboard's Wireless list on a phone, 6-9px at every
    density);
  * a page-title button row touched the heading above it, and the per-
      section
    Delete button touched the tab bar below it -- every named section, so
    SQM's queues and the firewall's zones alike;
  * the hairline under a value row separates it from the NEXT row, but was
    dropped only on :last-child, so a section that ends its rows and then
    renders a table drew a line across the top of it, cutting through a
    framed
    table's rounded corner. Counted over eight stock pages, separators fall
    only where one was dangling.

And one that is not spacing: el.hidden = true is the only way code that
ships
no stylesheet can hide an element, and the UA rule behind it loses to any
display a theme sets on a class. Measured here on .tr (table-row), .td
(table-cell), ul.nav &gt; li (block), .cbi-page-actions (flex) and .ifacebox
(inline-flex), all of which painted a hidden element anyway. No stock page
trips it today, and the theme's own point fix for the same fault -- a
restated
display:none for the search overlay -- goes away with the general one.
hidden="until-found" is excluded, since display:none would break the
find-in-page reveal it exists for. Four restatements of the attribute go
with
it -- the search overlay's, the Appearance body's, the wallpaper
row/preview/button trio and the search note's -- all of them dead the
moment
the general rule landed, and all of them still reading as the reason those
elements hide.

Signed-off-by: Ivan Kvashonkin &lt;vizzlef@gmail.com&gt;
</content>
</entry>
</feed>
