Create precise, production-ready SVG graphics for technical and business contexts (diagrams, P&IDs, HMI/SCADA widgets, process flow visuals, PowerPoint/Office illustrations, UI icons, annotations). Use when the user asks to generate, edit, standardize, optimize, or export SVG artwork; convert requirements (dimensions, scale, line weights, layers, symbols) into clean SVG markup; or produce multiple layout/variant files (editable vs outlined text, light/dark, monochrome).
Create clean, scalable SVG that is easy to edit, prints well, and survives “real-world” tooling (PowerPoint, browser, PDF export, HMI toolchains).
viewBox on every SVG.path, rect, circle, line, polyline, polygon.id on key groups, class for reusable styling.filter, mask, clipPath, foreignObject, blend modes, external images/fonts.linearGradient/radialGradient).Capture enough to produce the correct output on the first pass.
Target environment (drives compatibility)
Canvas + scale
Useful conversions (SVG assumes 96 DPI for CSS pixels):
Styling constraints
Content + semantics
Deliverables
Use strokes, consistent line weights, and a simple palette. Prefer vector-effect="non-scaling-stroke" when objects will be scaled.
Key tips:
<g id="symbol-*"> groups.stroke="currentColor" on symbols when you want themeable line art.polyline.Prioritize compatibility:
fill, stroke, stroke-width) over heavy CSS.marker arrows (Office support varies).<text> if the user wants to edit labels in PPT.Design for clarity at small sizes and for interaction:
fill="transparent" for click/touch zones)..state-ok, .state-alarm, .state-disabled).Use this as the default structure.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 200" width="300" height="200" role="img" aria-labelledby="title desc">
<title id="title">Diagram title</title>
<desc id="desc">Short description of what is shown</desc>
<defs>
<style>
.line { fill: none; stroke: #111827; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.thin { stroke-width: 1; }
.fill { fill: #F3F4F6; }
.text { fill: #111827; font-family: Arial, sans-serif; font-size: 12px; }
</style>
</defs>
<g id="layer-background"></g>
<g id="layer-geometry"></g>
<g id="layer-annotations"></g>
</svg>
If targeting PowerPoint/Office and compatibility is uncertain, repeat critical attributes inline on elements (Office can be picky about CSS).
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 80" width="240" height="80">
<g id="pipe" stroke="#111827" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round" vector-effect="non-scaling-stroke">
<polyline points="20,40 160,40" />
<!-- arrow head (Office-friendly: polygon instead of marker) -->
<polygon points="160,32 160,48 178,40" fill="#111827" stroke="none" />
</g>
<g id="tag">
<rect x="185" y="24" width="45" height="32" rx="6" fill="#FFFFFF" stroke="#111827" stroke-width="2" />
<text x="207.5" y="45" text-anchor="middle" font-family="Arial, sans-serif" font-size="12" fill="#111827">P-101</text>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 40" width="120" height="40">
<g id="valve" stroke="#111827" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round" vector-effect="non-scaling-stroke">
<line x1="10" y1="20" x2="35" y2="20" />
<line x1="85" y1="20" x2="110" y2="20" />
<polygon points="35,8 60,20 35,32" />
<polygon points="85,8 60,20 85,32" />
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 220 70" width="220" height="70">
<defs>
<style>
.btn { stroke: #0F172A; stroke-width: 2; rx: 12; }
.ok { fill: #22C55E; }
.alarm { fill: #EF4444; }
.disabled { fill: #CBD5E1; }
.label { fill: #0F172A; font-family: Arial, sans-serif; font-size: 16px; font-weight: 700; }
</style>
</defs>
<g id="button" class="ok">
<rect class="btn ok" x="10" y="10" width="200" height="50" />
<text class="label" x="110" y="42" text-anchor="middle" dominant-baseline="middle">START</text>
<!-- hit area -->
<rect x="10" y="10" width="200" height="50" fill="transparent" />
</g>
</svg>
viewBox; ensure shapes fit the viewBox with sane margins.text-anchor, dominant-baseline).layer-*).When saving multiple variants, use a naming convention that encodes intent:
asset-name__v1__editable.svgasset-name__v1__outlined.svgasset-name__dark.svgasset-name__light.svgasset-name__scale-0-100.svgSave files into a logical folder (e.g., assets/svg/ or a user-specified directory).