From im-html-style-guide
This skill should be used when the user asks to format a Google Spreadsheet with Integral Media (IM) branding, or when building Google Sheets API batchUpdate requests for IM-branded spreadsheets. Triggers include: "format this spreadsheet", "IM sheets style", "branded Google Sheet", "style this sheet", "format the audit spreadsheet", "apply IM formatting", "Google Sheets batchUpdate formatting", "make this sheet look professional".
How this skill is triggered — by the user, by Claude, or both
Slash command
/im-html-style-guide:im-sheets-style-guideThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Brand-faithful formatting for Google Sheets, derived from the IM HTML style guide (`integralmedia1/im-html-style-guide`). Adapted for Sheets constraints: limited fonts, no border-radius/shadows/text-transform. All colour combinations pass WCAG AA (4.5:1+ for normal text).
Brand-faithful formatting for Google Sheets, derived from the IM HTML style guide (integralmedia1/im-html-style-guide). Adapted for Sheets constraints: limited fonts, no border-radius/shadows/text-transform. All colour combinations pass WCAG AA (4.5:1+ for normal text).
| Token | Hex | RGB (0-1) | WCAG Notes | Usage |
|---|---|---|---|---|
navy | #002F6C | 0.0, 0.184, 0.424 | 17.5:1 vs white | Document title row bg, summary tab colour |
navy-light | #0A3D7A | 0.039, 0.239, 0.478 | 14.4:1 vs white | Section divider row bg |
sky | #27C1F4 | 0.153, 0.757, 0.957 | Accent only | Tab colours (data tabs), accent borders |
sky-muted | #E6F7FE | 0.902, 0.969, 0.996 | 6.3:1 vs slate-dark | Notes/data source bg, LOW priority bg |
charcoal | #333740 | 0.200, 0.216, 0.251 | 14.8:1 vs white | All body text |
cool-grey | #DCDDEB | 0.863, 0.867, 0.922 | — | All borders, horizontal rules |
light | #F1F5F9 | 0.945, 0.961, 0.976 | 14.0:1 vs charcoal | Column header bg, alternating row band |
lighter | #F8FAFC | 0.973, 0.980, 0.988 | 16.7:1 vs navy | Sub-header bg |
slate-dark | #475569 | 0.278, 0.333, 0.412 | 6.3:1 vs sky-muted | Secondary text (notes, footnotes) |
white | #FFFFFF | 1.0, 1.0, 1.0 | — | Primary row bg, text on dark bg |
subtitle-grey | #CCCCCC | 0.8, 0.8, 0.8 | 10.8:1 vs navy | Subtitle text on navy bg |
red-muted | #FEE2E2 | 0.996, 0.886, 0.886 | 12.4:1 vs charcoal | HIGH priority bg |
amber-muted | #FEF3C7 | 0.996, 0.953, 0.780 | 13.8:1 vs charcoal | MEDIUM priority bg |
amber | #F59E0B | 0.961, 0.620, 0.043 | — | Warning row left border accent |
green-muted | #DCFCE7 | 0.863, 0.988, 0.906 | 14.2:1 vs charcoal | VERIFIED / complete bg |
slate (#64748B) replaced with slate-dark (#475569) for all secondary text — original was borderline 4.5:1 on sky-muted, new value gives 6.3:1 headroom| Element | Background | Text Colour | Font | Size | Bold | Height | Merge | Borders |
|---|---|---|---|---|---|---|---|---|
| Document title | navy | white | Roboto | 14pt | Yes | 40px | Full width | Bottom: 3px sky accent |
| Subtitle rows | navy | subtitle-grey | Roboto | 10pt | No | 22px | Full width | None |
| Section divider | navy-light | white | Roboto | 11pt | Yes | 30px | Full width | None |
| Column header | light | charcoal | Roboto | 10pt | Yes | 28px | No | Bottom: 1px cool-grey |
| Sub-header | lighter | navy | Roboto | 10pt | Yes | 26px | Full width | Bottom: 1px cool-grey |
| Data cell (single-line) | white | charcoal | Roboto | 10pt | No | 24px | No | Bottom: 1px cool-grey |
| Data cell (wrapped) | white | charcoal | Roboto | 10pt | No | 42px | No | Bottom: 1px cool-grey |
| Alt data cell (single-line) | light | charcoal | Roboto | 10pt | No | 24px | No | Bottom: 1px cool-grey |
| Alt data cell (wrapped) | light | charcoal | Roboto | 10pt | No | 42px | No | Bottom: 1px cool-grey |
| Data source note | sky-muted | slate-dark | Roboto | 10pt | Italic | 24px | Full width | None |
| Separator row | white | — | — | — | — | 20px | — | None |
| HIGH priority | red-muted | charcoal | Roboto | 10pt | Yes | 24px | No | Left: 3px red |
| MEDIUM priority | amber-muted | charcoal | Roboto | 10pt | Yes | 24px | No | Left: 3px amber |
| LOW priority | sky-muted | charcoal | Roboto | 10pt | Yes | 24px | No | Left: 3px sky |
| Warning row | amber-muted | charcoal | Roboto | 10pt | Yes | 24px | No | Left: 3px amber |
| Content Type | Width (px) |
|---|---|
| Dates | 140 |
| Email addresses | 250 |
| IDs / short codes | 110-140 |
| Names / labels | 220-280 |
| Status / role | 120-140 |
| Notes / descriptions | 300-400 |
| URLs | 320-400 |
Same formatting rules apply for white-label partner clients — just remove all IM references from content. No brand modifications needed to the formatting itself.
When building batchUpdate requests, use the RGB (0-1) values from the colour palette. Google Sheets API expects { red: 0.0, green: 0.184, blue: 0.424 } format.
endColumn to column Z and from endRow to row 100+. Old banded ranges and formatting often extend beyond the visible data area.wrapStrategy: "WRAP" on all content columns. Only use CLIP/OVERFLOW on columns with short single-value content (yes/no, single IDs under 15 chars).unmergeCells on the full sheet range before applying any new mergeCells requests. Otherwise you'll get "You must select all cells in a merged range to merge or unmerge them" errors from cells merged in previous sessions.addBanding fails if any banded range already overlaps the target range. The correct delete method is deleteBanding (not deleteBandedRange). Query existing banded ranges first and delete ALL of them, not just known IDs.unmergeCells — clear all existing merges on the full sheet rangedeleteBanding — query and remove ALL existing banded rangesupdateSheetProperties — tab colour, frozen rowsmergeCells — section dividers, title rows, note rowsupdateDimensionProperties — column widths + row heightsrepeatCell — backgrounds, text formatting, fonts, alignment, wrapupdateBorders — horizontal rules, accent bordersaddBanding — alternating rows on data sections with 8+ rowsCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub integralmedia1/im-html-style-guide --plugin im-html-style-guide