+ {/*
+ * Tag colours are the user's, stored per tag, so these are raw hex values --
+ * the only place in the app that paints with something no theme chose. That
+ * is exactly why they belong here: the gallery had label swatches in theme
+ * colours and no user-coloured tag, so nobody saw that night was calculating
+ * the text colour against a fill it had already thrown away.
+ *
+ * Deliberately spans the range: near-white and near-black fills, where the
+ * black-or-light text decision flips, plus enough tags to wrap a row.
+ */}
+
+ {[
+ ['Water', '#2185d0'], ['Food', '#21ba45'], ['Medical', '#db2828'],
+ ['Shelter', '#a5673f'], ['Power', '#fbbd08'], ['Comms', '#6435c9'],
+ ['Reference', '#f2f2f2'], ['Archived', '#1b1c1d'],
+ ['Seeds', '#b5cc18'], ['Tools', '#00b5ad'], ['Navigation', '#e03997'],
+ ].map(([name, color]) => {name})}
+
+
+ Every tag must be readable in all four themes. In night and amber the
+ user's colour is discarded, so all tags look alike — that is the same
+ trade the labels above make, and it is deliberate.
+
+
+