Leeward · icon system · specimen 1.0
A stroke icon set for a coastal tide & weather station dashboard. Organic forms (swell, wind, moon, rain), instruments (anemometer, buoy, tide gauge, mooring) and interface verbs (filter, export, alert, history) drawn on one grid, to one weight, with one curve grammar.
All eighteen at 24 px, one line, both grounds. The set should read as a single voice — no icon heavier, lighter, larger or smaller than its neighbours.
Symbol id, name and family. Instruments borrow the organic icons’ curves (the buoy floats on the swell’s own wave; the tide gauge reads it against ruled ticks), which is what holds the three families together.
The keylines, and the rules every icon was drawn to.
stroke-width is left to the class so products can retune it.16 → 96 px on the same geometry. Two icons carry deliberate small-size cuts, swapped in below 20 px rather than letting detail clog.
Everything inherits currentColor — one sprite serves ink, accent,
semantic and on-dark uses with no second copy.
A station card. Icons beside text are decorative and hidden from assistive technology; icon-only controls carry names; the advisory glyph is a named image.
Inline the sprite once; reference by id. Size and weight belong to one class.
<!-- 1 · Paste the sprite once, right after <body> -->
<svg style="display:none" aria-hidden="true">
<symbol id="i-swell" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-linecap="round" stroke-linejoin="round">
<title>Swell</title> …
</symbol>
… seventeen more …
</svg>
/* 2 · One class carries size and weight. Weight stays in CSS,
never in the sprite, so it can always be themed. */
.ic{width:24px;height:24px;stroke-width:1.75}
<!-- 3 · Decorative (a text label exists): hide the glyph -->
<button><svg class="ic" aria-hidden="true"><use href="#i-filter"/></svg> Filter</button>
<!-- 4 · Meaningful (the icon is the label): name the control or the image -->
<button aria-label="Add to favourites">
<svg class="ic" aria-hidden="true"><use href="#i-favourite"/></svg>
</button>
<svg class="ic" role="img" aria-label="Small-craft advisory"><use href="#i-alert"/></svg>
/* 5 · Theme with currentColor; retune weight freely */
.warning{color:#b3541e} .dense{stroke-width:2}
<!-- 6 · Below 20 px, swap the two dense instruments for their cuts -->
<use href="#i-tide-sm"/> <use href="#i-anemometer-sm"/>
<title>; on decorative instances it is silenced by aria-hidden on the host <svg>, on meaningful instances the host’s aria-label takes over.