git.lucas.co / cce-icons
SVG icon set
git clone https://git.lucas.co/cce-icons.git

commit64e5d95c1af6e702d456133184b12f02a8ad1b5a
parentdadef5b303
authorLucas Galante <lsgalante12@gmail.com>
date2026-10-05 21:04
svg: the glyphs every cce app needs to draw its icons from this set

Survey of the workspace for icons drawn any other way (text symbols,
emoji, letters, hand-built primitive shapes) found these missing:

- toolkit and menus: chevron-up, circle-outline, more-horizontal, menu,
  link
- transport: pause, step-back, step-forward
- file types: file-image, file-audio, file-video, file-archive, file-code
- bookmarks, bluetooth, chat, gamepad, warning, error
- weather-*: clear, partly cloudy (day and night), cloudy, fog, drizzle,
  rain, snow, thunder. This one family carries its own colours (the
  weather app's), where every other glyph is white and tinted when drawn.

Also adds weather.svg and the cce-weather launcher link, left untracked
when the weather app was made.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

 hicolor/scalable/apps/cce-weather.svg |  1 +
 svg/bluetooth.svg                     |  7 +++++++
 svg/bookmarks.svg                     |  7 +++++++
 svg/chat.svg                          |  5 +++++
 svg/chevron-up.svg                    |  5 +++++
 svg/circle-outline.svg                |  6 ++++++
 svg/error.svg                         |  9 +++++++++
 svg/file-archive.svg                  | 14 ++++++++++++++
 svg/file-audio.svg                    | 11 +++++++++++
 svg/file-code.svg                     | 10 ++++++++++
 svg/file-image.svg                    | 10 ++++++++++
 svg/file-video.svg                    |  8 ++++++++
 svg/gamepad.svg                       | 11 +++++++++++
 svg/link.svg                          |  9 +++++++++
 svg/menu.svg                          |  9 +++++++++
 svg/more-horizontal.svg               | 10 ++++++++++
 svg/pause.svg                         |  9 +++++++++
 svg/step-back.svg                     |  7 +++++++
 svg/step-forward.svg                  |  8 ++++++++
 svg/warning.svg                       | 10 ++++++++++
 svg/weather-clear-day.svg             | 19 +++++++++++++++++++
 svg/weather-clear-night.svg           | 10 ++++++++++
 svg/weather-cloudy.svg                | 18 ++++++++++++++++++
 svg/weather-drizzle.svg               | 18 ++++++++++++++++++
 svg/weather-fog.svg                   | 18 ++++++++++++++++++
 svg/weather-partly-cloudy-day.svg     | 24 ++++++++++++++++++++++++
 svg/weather-partly-cloudy-night.svg   | 16 ++++++++++++++++
 svg/weather-rain.svg                  | 18 ++++++++++++++++++
 svg/weather-snow.svg                  | 28 ++++++++++++++++++++++++++++
 svg/weather-thunder.svg               | 14 ++++++++++++++
 svg/weather.svg                       | 20 ++++++++++++++++++++
 31 files changed, 369 insertions(+)

diff --git a/hicolor/scalable/apps/cce-weather.svg b/hicolor/scalable/apps/cce-weather.svg
new file mode 120000
index 0000000..79e4292
--- /dev/null
+++ b/hicolor/scalable/apps/cce-weather.svg
@@ -0,0 +1 @@
+../../../svg/weather.svg
\ No newline at end of file
diff --git a/svg/bluetooth.svg b/svg/bluetooth.svg
new file mode 100644
index 0000000..02e0cb2
--- /dev/null
+++ b/svg/bluetooth.svg
@@ -0,0 +1,7 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- The Bluetooth rune (Hagall over Bjarkan, as the mark is drawn): a
+       vertical stem with the two crossing arms. Stroke 4 with round joins,
+       as mail.svg. -->
+  <path d="M11 13 L28 27 L20 34 L20 6 L28 13 L11 27" fill="none" stroke="#ffffff"
+        stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
+</svg>
diff --git a/svg/bookmarks.svg b/svg/bookmarks.svg
new file mode 100644
index 0000000..960d715
--- /dev/null
+++ b/svg/bookmarks.svg
@@ -0,0 +1,7 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Bookmarks (the saved list, where star.svg marks one page as saved):
+       two ribbon bookmarks, the back one at 0.55 and offset up and right.
+       Each is a rounded strip with a notched foot. -->
+  <path fill="#ffffff" opacity="0.55" d="M16 4 L29 4 Q33 4 33 8 L33 30 L24.5 24 L16 30 Z" />
+  <path fill="#ffffff" d="M11 10 Q7 10 7 14 L7 36 L15.5 30 L24 36 L24 14 Q24 10 20 10 Z" />
+</svg>
diff --git a/svg/chat.svg b/svg/chat.svg
new file mode 100644
index 0000000..3fb4eb5
--- /dev/null
+++ b/svg/chat.svg
@@ -0,0 +1,5 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Speech bubble: a squircle balloon (r=4.5, as folder.svg) with a tail
+       at its lower left. -->
+  <path fill="#ffffff" d="M4 12.75 C4 8.25 6.25 6 10.75 6 L29.25 6 C33.75 6 36 8.25 36 12.75 L36 21.25 C36 25.75 33.75 28 29.25 28 L17 28 L10 34.5 Q8.5 35.8 8.5 33.8 L8.5 28 Q4 27.5 4 21.25 Z" />
+</svg>
diff --git a/svg/chevron-up.svg b/svg/chevron-up.svg
new file mode 100644
index 0000000..e76c57e
--- /dev/null
+++ b/svg/chevron-up.svg
@@ -0,0 +1,5 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Stylized rounded up-pointing triangle (chevron-down flipped: an ascending sort mark) -->
+  <path d="M8 26 L32 26 L20 10 Z" fill="#ffffff" stroke="#ffffff"
+        stroke-width="6" stroke-linejoin="round" />
+</svg>
diff --git a/svg/circle-outline.svg b/svg/circle-outline.svg
new file mode 100644
index 0000000..0866c4c
--- /dev/null
+++ b/svg/circle-outline.svg
@@ -0,0 +1,6 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Hollow ring: circle.svg's "off" partner (a toggle or radio mark that is not set,
+       a disconnected status). Stroke 5 on r=12.5, so the outer edge lands at
+       circle.svg's r=15 and the two read as one shape, filled or not. -->
+  <circle cx="20" cy="20" r="12.5" fill="none" stroke="#ffffff" stroke-width="5" />
+</svg>
diff --git a/svg/error.svg b/svg/error.svg
new file mode 100644
index 0000000..baad818
--- /dev/null
+++ b/svg/error.svg
@@ -0,0 +1,9 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Error: circle.svg's disc with an exclamation mark knocked out dark
+       (warning.svg's mark, on the disc). -->
+  <circle cx="20" cy="20" r="15" fill="#ffffff" />
+  <g fill="#282a36" opacity="0.35">
+    <rect x="18.25" y="10.5" width="3.5" height="12" rx="1.75" />
+    <circle cx="20" cy="27.75" r="2" />
+  </g>
+</svg>
diff --git a/svg/file-archive.svg b/svg/file-archive.svg
new file mode 100644
index 0000000..5b9a7fa
--- /dev/null
+++ b/svg/file-archive.svg
@@ -0,0 +1,14 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- A file of one kind: file.svg's sheet as the 0.55 back layer, with
+       a zip: a column of teeth down the sheet and a pull tab at full opacity in its body, below the fold. -->
+  <path d="M13 4 Q9 4 9 8 L9 32 Q9 36 13 36 L27 36 Q31 36 31 32 L31 14 L21 4 Z"
+        fill="#ffffff" opacity="0.55" />
+  <g fill="#ffffff">
+    <rect x="17" y="6" width="4" height="3" rx="1" />
+    <rect x="19" y="10" width="4" height="3" rx="1" />
+    <rect x="17" y="14" width="4" height="3" rx="1" />
+    <rect x="19" y="18" width="4" height="3" rx="1" />
+    <rect x="16.5" y="23" width="7" height="9" rx="2.5" />
+  </g>
+  <rect x="18.5" y="27" width="3" height="2.5" rx="1" fill="#282a36" opacity="0.35" />
+</svg>
diff --git a/svg/file-audio.svg b/svg/file-audio.svg
new file mode 100644
index 0000000..8e80f3b
--- /dev/null
+++ b/svg/file-audio.svg
@@ -0,0 +1,11 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- A file of one kind: file.svg's sheet as the 0.55 back layer, with
+       a music note (a filled head on a stem with a flag) at full opacity in its body, below the fold. -->
+  <path d="M13 4 Q9 4 9 8 L9 32 Q9 36 13 36 L27 36 Q31 36 31 32 L31 14 L21 4 Z"
+        fill="#ffffff" opacity="0.55" />
+  <g fill="#ffffff">
+    <circle cx="17" cy="29" r="4" />
+    <rect x="18.5" y="15" width="3" height="14.5" rx="1.5" />
+    <path d="M18.5 15 Q18.5 13.5 20 14 L25 15.8 Q26 16.2 26 17.2 L26 19.2 Q26 20.3 25 20 L21.5 18.8 Z" />
+  </g>
+</svg>
diff --git a/svg/file-code.svg b/svg/file-code.svg
new file mode 100644
index 0000000..1ab0c74
--- /dev/null
+++ b/svg/file-code.svg
@@ -0,0 +1,10 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- A file of one kind: file.svg's sheet as the 0.55 back layer, with
+       angle brackets (code) at full opacity in its body, below the fold. -->
+  <path d="M13 4 Q9 4 9 8 L9 32 Q9 36 13 36 L27 36 Q31 36 31 32 L31 14 L21 4 Z"
+        fill="#ffffff" opacity="0.55" />
+  <g fill="none" stroke="#ffffff" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round">
+    <path d="M16.5 19.5 L12.5 24.5 L16.5 29.5" />
+    <path d="M23.5 19.5 L27.5 24.5 L23.5 29.5" />
+  </g>
+</svg>
diff --git a/svg/file-image.svg b/svg/file-image.svg
new file mode 100644
index 0000000..1d9cb98
--- /dev/null
+++ b/svg/file-image.svg
@@ -0,0 +1,10 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- A file of one kind: file.svg's sheet as the 0.55 back layer, with
+       a picture (a sun over two hills) at full opacity in its body, below the fold. -->
+  <path d="M13 4 Q9 4 9 8 L9 32 Q9 36 13 36 L27 36 Q31 36 31 32 L31 14 L21 4 Z"
+        fill="#ffffff" opacity="0.55" />
+  <g fill="#ffffff">
+    <circle cx="15" cy="19" r="2.75" />
+    <path d="M9 31 L16.5 24 L20.5 27.5 L24.5 22.5 L31 30 L31 32 Q31 36 27 36 L13 36 Q9 36 9 32 Z" />
+  </g>
+</svg>
diff --git a/svg/file-video.svg b/svg/file-video.svg
new file mode 100644
index 0000000..ae95b42
--- /dev/null
+++ b/svg/file-video.svg
@@ -0,0 +1,8 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- A file of one kind: file.svg's sheet as the 0.55 back layer, with
+       play.svg's triangle, small at full opacity in its body, below the fold. -->
+  <path d="M13 4 Q9 4 9 8 L9 32 Q9 36 13 36 L27 36 Q31 36 31 32 L31 14 L21 4 Z"
+        fill="#ffffff" opacity="0.55" />
+  <path d="M17 20.5 L25 26 L17 31.5 Z" fill="#ffffff" stroke="#ffffff"
+        stroke-width="4" stroke-linejoin="round" />
+</svg>
diff --git a/svg/gamepad.svg b/svg/gamepad.svg
new file mode 100644
index 0000000..012ddd0
--- /dev/null
+++ b/svg/gamepad.svg
@@ -0,0 +1,11 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Game controller: a rounded body with two grips, a d-pad and two
+       buttons knocked out in the dark inset treatment (keyboard.svg). -->
+  <path fill="#ffffff" d="M12 10 L28 10 C33 10 35.5 13 36.5 18 L38 26 C38.8 30.5 35.5 33 32 31 L27 26 L13 26 L8 31 C4.5 33 1.2 30.5 2 26 L3.5 18 C4.5 13 7 10 12 10 Z" />
+  <g fill="#282a36" opacity="0.35">
+    <rect x="9" y="16.75" width="9" height="3" rx="1.2" />
+    <rect x="12" y="13.75" width="3" height="9" rx="1.2" />
+    <circle cx="27" cy="15.5" r="2" />
+    <circle cx="30.5" cy="20" r="2" />
+  </g>
+</svg>
diff --git a/svg/link.svg b/svg/link.svg
new file mode 100644
index 0000000..8301456
--- /dev/null
+++ b/svg/link.svg
@@ -0,0 +1,9 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Chain link: two rounded links at 45 degrees, linked through each other.
+       Wireframe at stroke 4, the outline weight of mail.svg; the near link
+       is drawn last so it passes over the far one. -->
+  <g fill="none" stroke="#ffffff" stroke-width="4" stroke-linecap="round" transform="rotate(-45 20 20)">
+    <rect x="4" y="14" width="18" height="12" rx="6" />
+    <rect x="18" y="14" width="18" height="12" rx="6" />
+  </g>
+</svg>
diff --git a/svg/menu.svg b/svg/menu.svg
new file mode 100644
index 0000000..58af7e8
--- /dev/null
+++ b/svg/menu.svg
@@ -0,0 +1,9 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Three bars (the hamburger): a list or switcher panel. Each bar is
+       minus.svg's, 6 thick with round ends, stacked on 9.5 centres. -->
+  <g fill="#ffffff">
+    <rect x="4" y="7.5" width="32" height="6" rx="3" />
+    <rect x="4" y="17" width="32" height="6" rx="3" />
+    <rect x="4" y="26.5" width="32" height="6" rx="3" />
+  </g>
+</svg>
diff --git a/svg/more-horizontal.svg b/svg/more-horizontal.svg
new file mode 100644
index 0000000..e0d4f8b
--- /dev/null
+++ b/svg/more-horizontal.svg
@@ -0,0 +1,10 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Three dots in a row: an overflow menu, or the segments a breadcrumb
+       folded away. Dots r=3.5, on centres 12 apart so the row spans the
+       4..36 glyph bounds. -->
+  <g fill="#ffffff">
+    <circle cx="8" cy="20" r="3.5" />
+    <circle cx="20" cy="20" r="3.5" />
+    <circle cx="32" cy="20" r="3.5" />
+  </g>
+</svg>
diff --git a/svg/pause.svg b/svg/pause.svg
new file mode 100644
index 0000000..e8e6f3b
--- /dev/null
+++ b/svg/pause.svg
@@ -0,0 +1,9 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Two solid rounded bars (pause), play.svg's partner. Each bar is as tall
+       as stop.svg's square and the gap between them is its width, so the
+       pair carries the solid family's weight. -->
+  <g fill="#ffffff">
+    <rect x="9" y="8" width="8" height="24" rx="3" />
+    <rect x="23" y="8" width="8" height="24" rx="3" />
+  </g>
+</svg>
diff --git a/svg/step-back.svg b/svg/step-back.svg
new file mode 100644
index 0000000..1d50d87
--- /dev/null
+++ b/svg/step-back.svg
@@ -0,0 +1,7 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Step back one frame: step-forward.svg mirrored. -->
+  <g fill="#ffffff">
+    <path d="M30 10 L16.5 20 L30 30 Z" stroke="#ffffff" stroke-width="6" stroke-linejoin="round" />
+    <rect x="7" y="7" width="6" height="26" rx="3" />
+  </g>
+</svg>
diff --git a/svg/step-forward.svg b/svg/step-forward.svg
new file mode 100644
index 0000000..83ba290
--- /dev/null
+++ b/svg/step-forward.svg
@@ -0,0 +1,8 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Step forward one frame: play.svg's triangle, narrowed, against a bar
+       at its tip. The bar is pause.svg's at three quarters the width. -->
+  <g fill="#ffffff">
+    <path d="M10 10 L23.5 20 L10 30 Z" stroke="#ffffff" stroke-width="6" stroke-linejoin="round" />
+    <rect x="27" y="7" width="6" height="26" rx="3" />
+  </g>
+</svg>
diff --git a/svg/warning.svg b/svg/warning.svg
new file mode 100644
index 0000000..7cf178a
--- /dev/null
+++ b/svg/warning.svg
@@ -0,0 +1,10 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Warning: a solid rounded triangle (play.svg's construction, a fill with
+       a round-joined stroke) with an exclamation mark knocked out dark. -->
+  <path d="M20 6 L35 32 L5 32 Z" fill="#ffffff" stroke="#ffffff" stroke-width="5"
+        stroke-linejoin="round" />
+  <g fill="#282a36" opacity="0.35">
+    <rect x="18.25" y="14" width="3.5" height="10" rx="1.75" />
+    <circle cx="20" cy="28.25" r="2" />
+  </g>
+</svg>
diff --git a/svg/weather-clear-day.svg b/svg/weather-clear-day.svg
new file mode 100644
index 0000000..cdbb505
--- /dev/null
+++ b/svg/weather-clear-day.svg
@@ -0,0 +1,19 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Clear sky, day: the sun, a disc in a ring of round-capped rays.
+       Part of the weather-* family, which carries its OWN colours where every
+       other glyph is white and tinted when drawn (the user's call, 2026-10-05):
+       sun #ffb82e, moon #dbe0f2, cloud #ccd4e0, dark cloud #858c9e, rain
+       #5c9eff, snow #f0f5ff, bolt #ffd640: cce-weather's glyph colours
+       before these replaced its primitive drawing. Draw them untinted. -->
+  <circle cx="20" cy="20" r="7.5" fill="#ffb82e" />
+  <g stroke="#ffb82e" stroke-width="2.85" stroke-linecap="round">
+    <path d="M30.88 20.00 L35.00 20.00" />
+    <path d="M27.69 27.69 L30.61 30.61" />
+    <path d="M20.00 30.88 L20.00 35.00" />
+    <path d="M12.31 27.69 L9.39 30.61" />
+    <path d="M9.12 20.00 L5.00 20.00" />
+    <path d="M12.31 12.31 L9.39 9.39" />
+    <path d="M20.00 9.12 L20.00 5.00" />
+    <path d="M27.69 12.31 L30.61 9.39" />
+  </g>
+</svg>
diff --git a/svg/weather-clear-night.svg b/svg/weather-clear-night.svg
new file mode 100644
index 0000000..e5cc7a2
--- /dev/null
+++ b/svg/weather-clear-night.svg
@@ -0,0 +1,10 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Clear sky, night: a crescent moon.
+       Part of the weather-* family, which carries its OWN colours where every
+       other glyph is white and tinted when drawn (the user's call, 2026-10-05):
+       sun #ffb82e, moon #dbe0f2, cloud #ccd4e0, dark cloud #858c9e, rain
+       #5c9eff, snow #f0f5ff, bolt #ffd640: cce-weather's glyph colours
+       before these replaced its primitive drawing. Draw them untinted. -->
+  <mask id="m"><rect width="40" height="40" fill="#fff" /><circle cx="27.15" cy="14.15" r="11.05" fill="#000" /></mask>
+  <circle cx="20" cy="20" r="13" fill="#dbe0f2" mask="url(#m)" />
+</svg>
diff --git a/svg/weather-cloudy.svg b/svg/weather-cloudy.svg
new file mode 100644
index 0000000..481ad00
--- /dev/null
+++ b/svg/weather-cloudy.svg
@@ -0,0 +1,18 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Overcast: a dark cloud behind a light one.
+       Part of the weather-* family, which carries its OWN colours where every
+       other glyph is white and tinted when drawn (the user's call, 2026-10-05):
+       sun #ffb82e, moon #dbe0f2, cloud #ccd4e0, dark cloud #858c9e, rain
+       #5c9eff, snow #f0f5ff, bolt #ffd640: cce-weather's glyph colours
+       before these replaced its primitive drawing. Draw them untinted. -->
+  <g fill="#858c9e" transform="translate(9 -5) scale(0.75)">
+    <circle cx="14" cy="21" r="8" />
+    <circle cx="25" cy="18" r="10" />
+    <rect x="6" y="21" width="28" height="10" rx="5" />
+  </g>
+  <g fill="#ccd4e0" transform="translate(-2 2.5) scale(0.95)">
+    <circle cx="14" cy="21" r="8" />
+    <circle cx="25" cy="18" r="10" />
+    <rect x="6" y="21" width="28" height="10" rx="5" />
+  </g>
+</svg>
diff --git a/svg/weather-drizzle.svg b/svg/weather-drizzle.svg
new file mode 100644
index 0000000..3b2c8d9
--- /dev/null
+++ b/svg/weather-drizzle.svg
@@ -0,0 +1,18 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Drizzle: the cloud over three short, light streaks.
+       Part of the weather-* family, which carries its OWN colours where every
+       other glyph is white and tinted when drawn (the user's call, 2026-10-05):
+       sun #ffb82e, moon #dbe0f2, cloud #ccd4e0, dark cloud #858c9e, rain
+       #5c9eff, snow #f0f5ff, bolt #ffd640: cce-weather's glyph colours
+       before these replaced its primitive drawing. Draw them untinted. -->
+  <g fill="#ccd4e0" transform="translate(0 -9) scale(1.0)">
+    <circle cx="14" cy="21" r="8" />
+    <circle cx="25" cy="18" r="10" />
+    <rect x="6" y="21" width="28" height="10" rx="5" />
+  </g>
+  <g stroke="#5c9eff" stroke-width="2.5" stroke-linecap="round">
+    <path d="M12 29 L10.20 33.50" />
+    <path d="M20 31 L18.20 35.50" />
+    <path d="M28 29 L26.20 33.50" />
+  </g>
+</svg>
diff --git a/svg/weather-fog.svg b/svg/weather-fog.svg
new file mode 100644
index 0000000..842f312
--- /dev/null
+++ b/svg/weather-fog.svg
@@ -0,0 +1,18 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Fog: a dark cloud over three bars of haze.
+       Part of the weather-* family, which carries its OWN colours where every
+       other glyph is white and tinted when drawn (the user's call, 2026-10-05):
+       sun #ffb82e, moon #dbe0f2, cloud #ccd4e0, dark cloud #858c9e, rain
+       #5c9eff, snow #f0f5ff, bolt #ffd640: cce-weather's glyph colours
+       before these replaced its primitive drawing. Draw them untinted. -->
+  <g fill="#858c9e" transform="translate(0 -10) scale(1.0)">
+    <circle cx="14" cy="21" r="8" />
+    <circle cx="25" cy="18" r="10" />
+    <rect x="6" y="21" width="28" height="10" rx="5" />
+  </g>
+  <g stroke="#ccd4e0" stroke-width="3" stroke-linecap="round">
+    <path d="M8 27 L28 27" />
+    <path d="M13 32 L33 32" />
+    <path d="M9 37 L27 37" />
+  </g>
+</svg>
diff --git a/svg/weather-partly-cloudy-day.svg b/svg/weather-partly-cloudy-day.svg
new file mode 100644
index 0000000..ec668a8
--- /dev/null
+++ b/svg/weather-partly-cloudy-day.svg
@@ -0,0 +1,24 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Partly cloudy, day: the sun behind cloud.svg's cloud (weather.svg in colour).
+       Part of the weather-* family, which carries its OWN colours where every
+       other glyph is white and tinted when drawn (the user's call, 2026-10-05):
+       sun #ffb82e, moon #dbe0f2, cloud #ccd4e0, dark cloud #858c9e, rain
+       #5c9eff, snow #f0f5ff, bolt #ffd640: cce-weather's glyph colours
+       before these replaced its primitive drawing. Draw them untinted. -->
+  <circle cx="26" cy="14" r="5" fill="#ffb82e" />
+  <g stroke="#ffb82e" stroke-width="1.9" stroke-linecap="round">
+    <path d="M33.25 14.00 L36.00 14.00" />
+    <path d="M31.13 19.13 L33.07 21.07" />
+    <path d="M26.00 21.25 L26.00 24.00" />
+    <path d="M20.87 19.13 L18.93 21.07" />
+    <path d="M18.75 14.00 L16.00 14.00" />
+    <path d="M20.87 8.87 L18.93 6.93" />
+    <path d="M26.00 6.75 L26.00 4.00" />
+    <path d="M31.13 8.87 L33.07 6.93" />
+  </g>
+  <g fill="#ccd4e0" transform="translate(-1.5 1.5) scale(0.95)">
+    <circle cx="14" cy="21" r="8" />
+    <circle cx="25" cy="18" r="10" />
+    <rect x="6" y="21" width="28" height="10" rx="5" />
+  </g>
+</svg>
diff --git a/svg/weather-partly-cloudy-night.svg b/svg/weather-partly-cloudy-night.svg
new file mode 100644
index 0000000..020dff9
--- /dev/null
+++ b/svg/weather-partly-cloudy-night.svg
@@ -0,0 +1,16 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Partly cloudy, night: the crescent behind the cloud, turned so its lit
+       limb is the side the cloud leaves showing.
+       Part of the weather-* family, which carries its OWN colours where every
+       other glyph is white and tinted when drawn (the user's call, 2026-10-05):
+       sun #ffb82e, moon #dbe0f2, cloud #ccd4e0, dark cloud #858c9e, rain
+       #5c9eff, snow #f0f5ff, bolt #ffd640: cce-weather's glyph colours
+       before these replaced its primitive drawing. Draw them untinted. -->
+  <mask id="m"><rect width="40" height="40" fill="#fff" /><circle cx="22.05" cy="8.45" r="7.65" fill="#000" /></mask>
+  <circle cx="27" cy="12.5" r="9" fill="#dbe0f2" mask="url(#m)" />
+  <g fill="#ccd4e0" transform="translate(-1.5 1.5) scale(0.95)">
+    <circle cx="14" cy="21" r="8" />
+    <circle cx="25" cy="18" r="10" />
+    <rect x="6" y="21" width="28" height="10" rx="5" />
+  </g>
+</svg>
diff --git a/svg/weather-rain.svg b/svg/weather-rain.svg
new file mode 100644
index 0000000..f6942c5
--- /dev/null
+++ b/svg/weather-rain.svg
@@ -0,0 +1,18 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Rain: the cloud over three long streaks.
+       Part of the weather-* family, which carries its OWN colours where every
+       other glyph is white and tinted when drawn (the user's call, 2026-10-05):
+       sun #ffb82e, moon #dbe0f2, cloud #ccd4e0, dark cloud #858c9e, rain
+       #5c9eff, snow #f0f5ff, bolt #ffd640: cce-weather's glyph colours
+       before these replaced its primitive drawing. Draw them untinted. -->
+  <g fill="#ccd4e0" transform="translate(0 -9) scale(1.0)">
+    <circle cx="14" cy="21" r="8" />
+    <circle cx="25" cy="18" r="10" />
+    <rect x="6" y="21" width="28" height="10" rx="5" />
+  </g>
+  <g stroke="#5c9eff" stroke-width="3" stroke-linecap="round">
+    <path d="M12 29 L8.80 37.00" />
+    <path d="M20 31 L16.80 39.00" />
+    <path d="M28 29 L24.80 37.00" />
+  </g>
+</svg>
diff --git a/svg/weather-snow.svg b/svg/weather-snow.svg
new file mode 100644
index 0000000..6574f31
--- /dev/null
+++ b/svg/weather-snow.svg
@@ -0,0 +1,28 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Snow: the cloud over three six-armed flakes.
+       Part of the weather-* family, which carries its OWN colours where every
+       other glyph is white and tinted when drawn (the user's call, 2026-10-05):
+       sun #ffb82e, moon #dbe0f2, cloud #ccd4e0, dark cloud #858c9e, rain
+       #5c9eff, snow #f0f5ff, bolt #ffd640: cce-weather's glyph colours
+       before these replaced its primitive drawing. Draw them untinted. -->
+  <g fill="#ccd4e0" transform="translate(0 -9) scale(1.0)">
+    <circle cx="14" cy="21" r="8" />
+    <circle cx="25" cy="18" r="10" />
+    <rect x="6" y="21" width="28" height="10" rx="5" />
+  </g>
+  <g stroke="#f0f5ff" stroke-width="2" stroke-linecap="round">
+    <path d="M12.00 28.30 L12.00 34.70" />
+    <path d="M14.77 29.90 L9.23 33.10" />
+    <path d="M14.77 33.10 L9.23 29.90" />
+  </g>
+  <g stroke="#f0f5ff" stroke-width="2" stroke-linecap="round">
+    <path d="M20.00 31.80 L20.00 38.20" />
+    <path d="M22.77 33.40 L17.23 36.60" />
+    <path d="M22.77 36.60 L17.23 33.40" />
+  </g>
+  <g stroke="#f0f5ff" stroke-width="2" stroke-linecap="round">
+    <path d="M28.00 28.30 L28.00 34.70" />
+    <path d="M30.77 29.90 L25.23 33.10" />
+    <path d="M30.77 33.10 L25.23 29.90" />
+  </g>
+</svg>
diff --git a/svg/weather-thunder.svg b/svg/weather-thunder.svg
new file mode 100644
index 0000000..195bf34
--- /dev/null
+++ b/svg/weather-thunder.svg
@@ -0,0 +1,14 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Thunderstorm: a dark cloud and a lightning bolt.
+       Part of the weather-* family, which carries its OWN colours where every
+       other glyph is white and tinted when drawn (the user's call, 2026-10-05):
+       sun #ffb82e, moon #dbe0f2, cloud #ccd4e0, dark cloud #858c9e, rain
+       #5c9eff, snow #f0f5ff, bolt #ffd640: cce-weather's glyph colours
+       before these replaced its primitive drawing. Draw them untinted. -->
+  <g fill="#858c9e" transform="translate(0 -10) scale(1.0)">
+    <circle cx="14" cy="21" r="8" />
+    <circle cx="25" cy="18" r="10" />
+    <rect x="6" y="21" width="28" height="10" rx="5" />
+  </g>
+  <path d="M22 22 L14 31.5 L19.5 31.5 L16 39 L26.5 28 L20.5 28 L24 22 Z" fill="#ffd640" stroke="#ffd640" stroke-width="1.5" stroke-linejoin="round" />
+</svg>
diff --git a/svg/weather.svg b/svg/weather.svg
new file mode 100644
index 0000000..ea9d574
--- /dev/null
+++ b/svg/weather.svg
@@ -0,0 +1,20 @@
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+  <!-- Weather: a sun behind cloud.svg's cloud. The sun is the back layer
+       at 0.55, its rays round-capped strokes stopping short of the disc;
+       the cloud is the front layer, moved down-left to overlap it. -->
+  <g opacity="0.55">
+    <circle cx="26" cy="14" r="6" fill="#ffffff" />
+    <g fill="none" stroke="#ffffff" stroke-width="2.5" stroke-linecap="round">
+      <path d="M26 2.5 L26 4.5" />
+      <path d="M37.5 14 L35.5 14" />
+      <path d="M34.1 5.9 L32.7 7.3" />
+      <path d="M17.9 5.9 L19.3 7.3" />
+      <path d="M34.1 22.1 L32.7 20.7" />
+    </g>
+  </g>
+  <g fill="#ffffff">
+    <circle cx="12" cy="24" r="7" />
+    <circle cx="22" cy="21.5" r="8.5" />
+    <rect x="4" y="24" width="27" height="10" rx="5" />
+  </g>
+</svg>