Changelog
A log of additions, improvements, and fixes to the Canvas Design System.
June 2026
v2.7.18 — Intervention accent: purple → red
- Improved Intervention now uses red (Learn red
#E54D4D) as its accent instead of facilitate purple. Updated the--intervention-*tokens (primary/dark/light/very-light/gradient/shadow + 6 category tints) inplatform-tokens.css, theapps.interventionblock inworkshopr-design-system.json(with acolorNote), and theapp-intervention.phpguide. Drift check passes. Intervention stays in the Facilitate phase but is a deliberate color exception, like Tips.
June 2026
v2.7.17 — My Workshopr header section + self-contained footer
- New Added a
myworkshoprsection tows_header(iconspace_dashboard, tag “My Workshopr”, single Dashboard nav link). The title band is enlarged for this section (15px, wider) via a[data-section="myworkshopr"]-scoped rule so other apps are unaffected. - Improved The global footer (
includes/components/footer.php) now self-loadsplatform-tokens.cssso it renders correctly on host pages (e.g. MyWorkshopr) that don't already include the token sheet. Browsers dedupe the identical href elsewhere.
June 2026
v2.7.16 — ws_header account menu + wired controls
- New
ws_header(includes/components/header.php) gained a logged-in account dropdown (.wsh-header__account/.wsh-header__menu) with avatar, name/email, and links to My Workshopr, My Workshops, Team, Settings, and Sign out. - Improved Header controls are now functional: search button opens the site-search overlay (
data-search-trigger), the apps grid icon became a gear linking to/myworkshopr/, and Sign In opens the auth modal in place. The component now self-loads its auth-modal and search-overlay dependencies.
June 2026
v2.7.15 — Letter CTA form polish
- Improved Refined the footer Letter CTA form: input
border-radiusnow matches the button (10px), inputs bumped to 16px / roomier padding (no iOS zoom), added input hover states, a.cta__noteprivacy line, and a single-column stack under 480px.
June 2026
v2.7.14 — Letter CTA form wired to newsletter API
- Fixed The Letter CTA subscribe form (global footer +
academy/components/letter-cta.php) now submits to/api/newsletter.phpwith loading/success/error states. Added a.cta__hphoneypot field and.cta__msg/.cta__msg--errorstatus-message styles.
June 2026
v2.7.13 — Larger .section-title display headings
- Improved
.section-titledisplay headings increased ~25%: theclamp(28px, 4vw, 38px)rule (Intervention, Podcasts, Tips) is nowclamp(35px, 5vw, 48px); DNA moved--text-3xl→--text-4xl; shared-components and Academy usecalc(token * 1.25). Small uppercase sidebar/handout labels were intentionally left unchanged.
June 2026
v2.7.12 — Global header label left-aligned
- Improved
ws_header()app/section label (.wsh-header__tag) is now left-aligned (justify-content: flex-start; text-align: left) instead of centered, so multi-line labels like “Facilitator Style Quiz” read cleanly.
June 2026
v2.7.11 — Global header sticky to top
- Improved
ws_header()(.wsh-header) is nowposition: sticky; top: 0instead ofposition: relative, so the global navigation pins to the top of the viewport on scroll. Existingz-index: 1050(above planner topbar/slide panels, below modals) is unchanged.
June 2026
v2.7.10 — Section hero: book-cover carousel
- New
ws_section_hero()now supports a per-sectioncarouselconfig (array of{img, href, title}) that renders an auto-advancing book-cover carousel in the visual slot instead of the static illustration. Includes clickable covers, prev/next arrows, dot navigation, pause-on-hover/focus, andprefers-reduced-motionsupport. CSS/JS are namespaced under.wsh-carouseland self-emitted once. First used by the Academy hero to showcase all six ebook covers. Each slide also supports an optional top-right statuspill({label, tone}—availablegreen /soonred).
June 2026
v2.7.9 — Section hero component
- New
ws_section_hero($section)(includes/components/section-hero.php) — section-aware hero from the Figma "Hero — *" frames, with a per-section registry (home, library, academy, tips, planner). Self-emits its CSS under the.wsh-heronamespace so it renders on any page regardless of bundle. Illustrations live in/images/heroes/. Placed on the home, library, academy, tips, and planner-landing pages. - New
section-hero.phpisrequire_once'd by bothhelpers.phpandcomponents/header.php, so any page with the global header can render a section hero without pulling in the full helpers. - Fixed
ws_headernow establishes a stacking context (position: relative; z-index: 1050) so its app-switcher dropdown clears app chrome (planner topbar/panels) while staying below modals. - Improved Tuned
ws_section_heroto match the Figma "Hero — Home" frame exactly — light-weight Fraunces title in warm ink (#4D453B) with the red italic accent, bordered badge, gradient primary CTA, and dark (not red) stat figures. Pulled the exact illustration from Figma. - Improved Recreated the Library hero from the Figma "Hero — Library" frame — added optional
imageRounded(16px) andvisualChips(category quick-links under the illustration) to the component; Library now shows Workshops / Icebreakers / Collections / Goals chips. - New
includes/page-grid.php— a reusable snippet that lays the house graph-paper grid (24px, warm ink,background-attachment: fixed) over the pagebodybackground, preserving each page'sbackground-color. Added to the home, library, academy, tips, and planner landing index pages;ws_section_heroalso carries the grid so it reads behind the hero. - New
ws_dna_cta()(includes/components/dna-cta.php) — Facilitator-DNA quiz promo strip from the Figma "dna cta" frame: light-red bar with an overlapping circular archetype badge, red icon chip, title/subtitle, and a "Take the quiz" button linking to/dna/. Self-emits its CSS; ships with the global header. - Improved
ws_section_herobuttons now accept an optionalicon(the Academy hero's "Get the Books" uses it). Synced the Academy hero to its Figma frame (badge "Workshopr Academy", book icon on the primary CTA). - Fixed Hero/CTA icons rendered as literal text on pages (e.g. Academy) that use
ws_headerbut don't loadincludes/icon.php— the header component now loads the inline-SVGicon()helper so component icons always render. - Improved The global footer's "Level Up Your Facilitation" section now animates in on scroll — each row fades + rises as it enters the viewport, with cards staggered 70ms within a row (ease-out, ~0.5s). Progressive enhancement via
IntersectionObserver: no-JS andprefers-reduced-motionusers get the section with no hidden state, and the revealed state is explicit so content is never stuck hidden. Doesn't interfere with the existing card hover-lift.
June 2026
v2.7.8 — Planner recolored to mainsite red
- Improved The planner phase color is now mainsite red, not the legacy plan-phase blue.
_component-bridge.csspreviously remapped--mainsite-primary → --planner-primary(blue), forcing the whole planner blue. It now points the planner accent tokens (--planner-primary/dark/light/very-light, plus the--planner-interactive*and--planner-blue*aliases) at the native--mainsite-*reds, scoped tobody.planner-page/.planner-app-activeso it beats the:roottoken re-imports. Note: aliases declared: var(--planner-primary)at:rootare computed there and must be re-declared in the scoped block to recolor. - Improved AI Workshop Generator loading state (
_generator-modal.css) — heading/subtitle dropped from--text-display/--text-h2to--text-h3/--text-small, with a pulsingauto_awesomesparkle layered inside the spinner.
June 2026
v2.7.7 — Generator modal type scale
- Improved AI Workshop Generator modal (
css/planner/components/_generator-modal.css) — form labels/inputs/selects were using heading tokens (--text-h2/--text-h3); right-sized to--text-ui/--text-small/--text-metaso controls match the planner UI scale. Added a:-webkit-autofilloverride so autofilled fields stay on-theme instead of browser blue. Shared planner@importstamp bumped20260610 → 20260615. - Improved Generator output view got the same treatment — agenda item names dropped from
--text-h2to--text-h4, start times / headers / rationale / refine input from--text-h3to--text-ui/--text-small, the "total" badge became a pill, and the loud salmon (#FCA5A5) refine strip was softened to a light-red bar with a subtle border. - Improved Generator error state now matches the loading state — title/body dropped from
--text-display/--text-h2to--text-h3/--text-small, and the icon (which was targeting a never-rendered.material-symbols-rounded) is now a 44px circular error chip. All four generator states — form, output, loading, error — share one type scale and layout language.
June 2026
v2.7.6 — Versioned @imports rolled out platform-wide
- Fixed Extended the v2.7.5 stale-cache fix to every other CSS bundle with unversioned
@imports:css/styles.css(main site),css/coach/coach.css,css/dna/styles.css,css/academy/training.css,css/intervention/styles.css,css/participant/participant.css,css/facilitator/*.css,css/planner/analytics.css, plus the nested token imports (css/tokens/_variables.css,css/coach/base/_variables.css,assets/css/auth-modal.css,facilitator/css/facilitator.css). All imports now carry the shared?v=YYYYMMDDstamp. Bump the stamp whenever any imported file changes. External imports (Google Fonts) and bundler-managed apps (dna/mobile) deliberately excluded.
June 2026
v2.7.5 — Versioned @imports in the planner bundle
- Fixed Stale-cache breakage after CSS deploys: the
?v=stamp onplanner-new.cssnever invalidated the files it@imports, and the server caches CSS for 7 days — so production visitors kept week-old partials (collapsed.planner-bodyflex layout, exposed card edit panels). Every@importinplanner-new.css(and theplatform-tokens.cssimport insidebase/_variables.css) now carries a shared?v=YYYYMMDDstamp. Bump the stamp on all imports whenever any planner CSS changes.
June 2026
v2.7.4 — Planner stylesheet consolidation
- Fixed Made
css/planner/planner-new.cssthe single canonical planner bundle. The partially-guttedplanner-v2.cssmonolith (1,042DUPLICATE/EXTRACTEDmarkers) was retired and deleted; every selector it still held was already present in the imported component set, except the.sr-onlya11y utility which was migrated intoplanner-new.css.planner/includes/header.phpnow loads the one bundle on the modular path (the deadplanner.csslink and the temporary standalone_modals.csspatch are gone), and the kiosk/embedded headers were repointed off the retired monolith. Token values unchanged — drift check passes.
June 2026
v2.7.3 — Global 80% text scale
- Improved Platform text now renders at 80%. Font sizes are
remand spacing ispx, so a roothtml { font-size: 80% }shrinks all rem text while leaving layout intact. Added toplatform-tokens.cssand both global headers (unified-header.css,academy/global-header.css) to reach pages outside the token chain; the per-app html bases (mainsite, planner, academy, participant, facilitator) were scaled by the same0.8so it stays uniform. No token values changed, so the JSON mirror stays in sync (drift check passes). Inlinepxfont sizes on bespoke landing pages are not covered.
June 2026
v2.7.2 — Invalid negative-margin token syntax
- Fixed Repaired 8 invalid
-var(--space-*)negative margins acrosscss/detail-immersive.css,css/styles.css,css/planner/planner-v2.css,css/planner/live-mode.css, andcss/academy/styles.css.-var()is not valid CSS, so browsers dropped the entire declaration — most visibly leaving the library detail-page stats card (.immersive-stats-float) fully left-aligned because itsmargin: -var(--space-8) auto 0(and with it theautocentering) was ignored. The correct form for negating a token iscalc(-1 * var(--space-8)).
June 2026
v2.7.1 — Planner phase-color fix
- Fixed The planner’s component bridge (
css/planner/components/_component-bridge.css) never remapped--mainsite-primary, so the global header andws_*components fell back to mainsite red (#E54D4D) instead of the planner Plan-phase blue (#0284C7). Added a body-scoped remap (body.planner-app-active) that beats:rootand survives the lateplatform-tokens.css@importinassets/css/auth-modal.css. Semantic danger reds use their own tokens and are unaffected.
June 2026
v2.7.0 — Portable component library (PHP + React)
- New
design-system/components/php/anddesign-system/components/react/— portable implementations of everyws_*component (49) and all 6 documented patterns. PHP ships as namespacedWorkshopr\DS\*standalone functions (collision-free with the globalws_*helpers); React ships as typed.tsxfunction components (Ws<Name>+Ws<Name>Props). - Improved Both flavors render the existing
ws-*class names fromcomponents.css(single source of truth) — no duplicated CSS, no hardcoded colors/sizes/fonts. Shared helpers:_icon.php(icon/cx/attrs/e) andIcon.tsx/cx.ts. - New Barrels:
php/index.php(requires all 50 components, 59Workshopr\DSfunctions) andreact/index.ts(52 exports), plus aREADME.mdwith usage and a patterns-CSS caveat. All PHP verified withphp -l+ render smoke tests.
June 2026
v2.6.0 — AI-enablement: enforcer fix, enriched catalog, DTCG export
- Fixed The
design-system-enforcerMCP pointed at a stale/sites/newphpdir where the server file doesn’t exist, so it never launched — the AI’s real-time compliance oracle was dead. Repointed to the absolute platform path (now reads 325 tokens + 49ws_*helpers). Wired “validate before finishing any UI work” (check_snippet/validate_file/suggest_component) into CLAUDE.md, GEMINI.md, and START-HERE. - New
generate-catalog.phpnow enrichescomponents.generated.jsonwith a canonicalexample,whenToUse/whenNotToUse, ana11ynote, and a derivedantiPatternperws_*helper — extracted from thecomponents/*.phpdemos. It’s now the “how do I use this component” reference for AI (example 41/49, whenToUse 20/49, a11y 6/49). - New
generate-tokens-dtcg.php→tokens.dtcg.json: all tokens in W3C DTCG format with$typeinference,$descriptionfrom CSS comments, andvar()→{alias}references. Standard format for Style Dictionary, Figma, Tokens Studio, and AI tooling. - New
design-system/llms.txt— an llms.txt-convention index pointing AI agents at the canonical files, machine-readable sources, rules, and validators. Both new generators have--checkmodes wired into npm, the CIds-driftjob, and the pre-commit hook.
June 2026
v2.5.2 — Display + timer tokens (font-size scale complete)
- New Extended the type scale with five above-base tokens:
--text-display-lg(3.5rem/56px),--text-display-xl(4.5rem/72px) for large hero headings, and--text-timer-sm/md/lg(4/5/6rem) for the live & run-mode countdown numerals. - Improved Tokenized the final 12 held hero/timer declarations. The platform now has zero bare font-size values — every
font-sizeresolves through a--text-*token. check-drift passes; all apps verified HTTP 200.
June 2026
v2.5.1 — Off-scale font-size normalization
- Improved Snapped 619 off-scale font-sizes to the nearest type-scale step via
ds-tokenize-fontsize.mjs --snap. Each becomesvar(--text-*, <token-rem>)so the fallback matches the snapped size. Most deltas are sub-pixel; the visible ones are28px→24px(62×),22px→20px(46×),36px→32px, and40px→46px. - Held 12 hero declarations (56–96px / 3.5–6rem) are above the top scale step (46px); the snapper holds anything whose nearest step is >8px away rather than collapsing hero text. These await dedicated display tokens.
June 2026
v2.5.0 — Type-scale tokenization
- Improved Tokenized 1,635 hardcoded font-sizes to
--text-*across 104 stylesheets. Only exact on-scale values were converted (px and rem, parsed unit-agnostically), each retaining its original value as a standalone fallback — e.g.font-size: 14px→font-size: var(--text-small, 14px). Value-preserving, idempotent, and safe on pages that don't loadplatform-tokens.css. - New
scripts/ds-tokenize-fontsize.mjs— exact-match font-size tokenizer. Reports off-scale values rather than snapping them, so no size silently changes. - Note ~631 off-scale sizes remain (e.g.
0.8rem,0.85rem,17px,22px,28px, hero36–96px). These need a typography decision (snap to the nearest scale step = a visual change) and were deliberately not auto-converted.
June 2026
v2.4.0 — Compliance gate + token cleanup
- New
scripts/ds-lint.mjs— a low-noise compliance gate that fails on three high-signal regressions: cool-gray hex, banned font stacks (Source Sans 3, legacy Bitter/DM Sans), and wrong-phase brand-color leakage. Scopes phase rules carefully (purple is allowed in the blue planner for activity/icebreaker accents; green is never flagged because it doubles as success/complete). Runs vianpm run lint:ds, the pre-commit hook on staged files, and a CI job. - New
scripts/ds-tokenize.mjs— value-preserving hex→token rewriter. Maps grays (warm Stone), ink, semantic status, and brand primaries; resolves#fffby context (color:→--text-inverse, else--bg-surface); and skips hexes already invar()fallback position so it never produces redundantvar(--x, var(--x)). - Improved
components.css— 55 bare hardcoded colors tokenized and all 27 cool-grays removed. Several were dead-token fallbacks (var(--color-border, #e5e7eb),var(--color-text, #111827)) referencing undefined variables, so the cool gray was actually rendering; these now resolve to warm Stone / ink tokens. Component demo page verified rendering with zero PHP errors. - Fixed Phase-color leakage — Coach mobile app
--primaryand note-icons moved off mainsite red / planner blue onto Facilitate purple; Tips footer accents moved off red onto Tips purple. Coach, Tips, and Facilitator pages verified at HTTP 200. - Fixed
Source Sans 3→ Inter across facilitator, myworkshopr, participant, and prep stylesheets (12 declarations), enforcing the Fraunces/Inter mandate. Microsite--font-*definitions confirmed already on Fraunces/Inter (Bitter/DM Sans only survive in comments). - Improved Remaining cool-grays cleared from
library-goals.css, the shared_sidebar.css,listing-redesign.css, and the DNA mobile reading sheet, then from the consolidated planner tree — zero cool-grays platform-wide. - Fixed Resolved the last 22 wrong-phase lint hits. Investigation found these were all intentional danger/CTA reds caught only by their redundant literal
#E54D4Dfallbacks (facilitator--fac-red=--color-error; planner--planner-red= documented mainsite-CTA alias;--phase-learnstatus colors). Tokenized them (drop literal, keep the var) for zero visual change; mapped the live-mode--run-dangertoken to--color-error; and marked the standalone-capable auth-modal CTA with a documented lint exception. ds-lint now clean across all 112 scanned files.
June 2026
v2.3.0 — Consolidation: single entry point + drift guard
- New
START-HERE.md— one entry point with a stated source-of-truth hierarchy (/DESIGN.md+/motion.mdfor intent;platform-tokens.css+helpers.phpfor implementation; JSON as a machine mirror) and audience on-ramps for designers, developers, and Claude. - New
check-drift.php— guards the JSON mirror against drift: fails if anyws_*helper is undocumented in the JSON, or if phase-color tokens disagree betweenplatform-tokens.cssand the JSON. Known source contradictions (tips, training) are allowlisted as visible warnings pending a design decision. - Improved JSON
metanow references the canonical/DESIGN.mdand/motion.md, declares itself a hand-maintained mirror (correcting the earlier “auto-generated” claim), and points to the drift guard. - Improved
README.mdnow defers toSTART-HERE.mdand corrects the JSON provenance note. - Fixed Phase-color records reconciled to the shipped apps: Tips documented as a deliberate Facilitate-purple exception (Learn content, purple brand), and Academy/Training documented as Learn red (
#E54D4D) — the unimplemented “training = green” mapping was retired from the JSON,DESIGN.md, and CLAUDE.md §11. Each app now carries acolorNotein the JSON, and both passcheck-drift.phpwithout an allowlist. - New Added the
--facilitator-primarytoken family (aliased to--phase-facilitate,#7C4DFF) — facilitator was the only app missing its--{app}-primarytoken. The JSON facilitator color was corrected from the stray#7C3AEDto the phase purple, matching coach/intervention. - Improved
check-drift.phpnow resolves one level of CSSvar()indirection, so phase-aliased app tokens validate. Wired into governance:npm run lint:ds:drift, ads-driftPHP job in the Design System Lint GitHub workflow, and a staged-file gate in the pre-commit hook. - Improved
check-drift.phpgained a reverse check — a JSON component with no matchingws_*function (renamed/removed) now fails the build — and reports component counts. Corrected stale counts inREADME.md(39 demo pages, 49 helpers, not “34”/“40+”), and alignedGEMINI.mdwith the consolidatedDESIGN.md(it still pointed at the deprecated taste/principles/forms files). - New
generate-catalog.php+components.generated.json— a real generator that derives aws_*component roster (signature, summary, declared options) straight from thehelpers.phpdocblocks. The curated JSON keeps its rich hand-authored option metadata; the generated file is the can’t-drift companion.--checkmode fails on a stale roster or a curated signature that no longer matches source, wired intonpm run lint:ds:catalog, the CIds-driftjob, and the pre-commit hook. Also added the canonical-source banner tovoice.php/philosophy.phppointing atDESIGN.md.
May 2026
v2.2.0 — Token compliance: extended accent + brand tokens
- Improved Tokenized recurring hardcoded colors across
css/academy/styles.css,css/facilitator/facilitator.css,css/planner-new/*,css/styles.css, andcss/unified-header.css— raw hex values replaced with platform tokens. Exact color values preserved. - New Teal accent tokens for planner secondary actions:
--color-teal,--color-teal-dark. - New Extended state shades:
--color-warning-darker,--color-error-strong,--color-error-darker,--color-info-strong,--planner-accent-dark,--color-success-surface,--color-success-darker, and the soft warning callout surface (--color-warning-surface+-border/-ink). - New Meeting-tool brand tokens mirroring the podcast platform set:
--platform-meet,--platform-zoom,--platform-inperson(each with-ink/-bgvariants where used).
May 2026
v2.1.1 — Planner sidebar: prototype-matched toolbar + flat suggested list
- New
.sidebar-toolbarcomponent for the planner's activity sidebar — sticky search input + pill-style type tabs. Lives incss/planner/components/_sidebar.css(mirrored atcss/components/_sidebar.css). - New
.side__group/.side__group-title/.side__list/.side__more/.side__group-emptystructural classes for the flat "Suggested for X" list and "Browse all activities" footer link. - New
.library-card--libvariant — full-bleed flat draggable card with.lib-card__top(dot + title),.lib-card__meta(pill + duration),.lib-card__dot--{exercise|icebreaker|break}, and.lib-card__pill--{exercise|icebreaker|break}type modifiers. Scoped under.activity-sidebarso it doesn't affect other surfaces that use.library-card. - Improved All new card / pill colors pull from existing planner tokens (
--planner-exercise-color,--planner-icebreaker-color,--planner-break-color) viacolor-mix()for tinted backgrounds — no new hex values introduced. - New Utility hide rules:
.sidebar-section[hidden],.library-card[hidden],.sidebar-sections[hidden],.sidebar-custom-activity-section[hidden],.side__group[hidden],.side__group-empty[hidden]. Lets the filter module + legacy-section wrapper hide nodes via the native HTMLhiddenattribute.
May 2026
v2.1.0 — Level Up Grid: phase grouping + button --half
- New
ws_level_up_grid()now supports an optionalgroup_by_phase => truemode that renders Learn / Plan / Facilitate / Reflect as their own sub-sections, each with an italic phase title and a half-paragraph intro in Workshopr voice (overridable viaphase_copy). - New CSS classes for the grouped layout:
.ws-level-up__phase,.ws-level-up__phase-head,.ws-level-up__phase-title,.ws-level-up__phase-desc, plus phase-color modifiers (--learn / --plan / --facilitate / --reflect) on the phase block itself. - New
.ws-level-up__grid--3modifier for 3-up phase rows (used by Learn and Plan phases). Existing 4-up grid stays the default. - New
.ws-btn--halfwidth modifier (50%) — sized for narrow card columns where--fullreads as too dominant. - Improved Responsive overrides updated so both
.ws-level-up__gridand.ws-level-up__grid--3step down 4 → 3 → 2 → 1 column, and.ws-level-up__phase-headstacks below 1024px. - Improved Demo:
/design-system/components/demos/level-up-grid.phpnow showcases the grouped variant. Button demo cheatsheet lists--half.
April 2026
v2.0.0 — Planner ws_* Component Migration (Phase 5)
- Improved Migrated
planner/edit.phpbuttons and form inputs from raw HTML tows_button()andws_input() - Improved Migrated remaining raw inputs in
planner/includes/modals.php— invite email, role select, search inputs, category filter - Improved Replaced raw type badges and duration spans in
planner/view.phpwithws_badge()andws_duration() - Improved Standardized
planner/saved.phpbuttons withws_button() - Improved Migrated schedule panel in
planner/planner.php— date/time inputs, timezone select, footer buttons - Improved Tokenized inline checkbox styles in save modal to use
var(--space-*)andvar(--text-sm)
April 2026
v1.9.1 — Planner Brand Color Tokenization
- New Added
--planner-overlay-light/medium/heavyand--planner-backdrop/backdrop-lighttokens to planner variables - Improved Tokenized standalone
#E54D4D(red),#22C55E(green),#9333EA(purple),#F59E0B(warning) hex values across planner CSS to usevar(--planner-*)andvar(--color-*)tokens - Improved Replaced standalone
#2563EBin planner cards and generator modal withvar(--planner-exercise-color) - Improved Tokenized status/semantic colors (warning, error, success backgrounds) in planner-v2.css, analytics.css, exercise-builder.css, briefing.css, live-mode.css
April 2026
v1.9.0 — Cool Gray Eradication & Structural Adoption
- Improved Eradicated all 354 hardcoded cool gray hex values across 23 CSS files. Entire platform now uses warm stone grays (
--gray-50through--gray-900) exclusively - Improved Added
helpers.phpto globalheader.php— all pages now have automatic access tows_*component helpers without manual includes - Improved Migrated
/contact/form from raw HTML tows_input(),ws_select(),ws_button()components - Fixed Replaced 6 hardcoded
font-family: 'Bitter'in MyWorkshopr CSS withvar(--font-heading) - Fixed Cleaned up 2
DM Sansfont fallbacks in Academy CSS - Improved Coach variables now reference
var(--gray-*)tokens for text colors instead of cool gray hex values - Improved Landing page, auth modal, content gating, and typography base CSS fallbacks updated from cool to warm stone
- New Added "Touch It, Fix It" convention to
Conventions.mdfor ongoing adoption enforcement
April 2026
v1.8.4 — Live-Mode Font-Size Normalization
- Improved Normalized all hardcoded
font-sizevalues inlive-mode.cssto design system tokens: compact type scale variables for UI chrome,remunits for presentation display elements, icon sizes preserved aspx
April 2026
v1.8.3 — Planner Font-Weight & Font-Size Normalization
- Improved Converted 9 hardcoded
font-sizepx values toremunits inrun-mode.cssandworkshop-studio.css - Improved Replaced all hardcoded
font-weightnumeric values (400/500/600/700) with design tokens (--font-normal,--font-medium,--font-semibold,--font-bold) across 7 planner CSS files
April 2026
v1.8.2 — Facilitator CSS Hardening
- Improved Replaced ~25 instances of
transition: allin facilitator.css with specific property transitions using design tokens (--duration-fast,--duration-base) - Improved Tokenized ~40 standalone hardcoded hex colors to CSS variables with fallbacks (
--color-warning-*,--color-error-*,--color-success-*,--color-info-*,--phase-facilitate-*,--gray-*) - New Added
:focus-visibleoutlines to all 45+ interactive elements in the Facilitator app (buttons, tabs, cards, inputs) - New Added
@media (prefers-reduced-motion: reduce)block scoped to.facilitator-app
March 2026
v1.8.1 — Secondary Button Refinement
- Improved
.ws-btn--secondaryhover style updated: now uses a subtle background tint (--phase-learn-very-light) and darker text instead of a full solid color fill, matching the academy pattern for a more refined interaction - Improved
.ws-btn--secondarydefault background changed from opaque white (--bg-surface) totransparentfor better layering on non-white backgrounds
March 2026
v1.8.0 — Semantic Tokens & Cross-App Polish
- New 40+ semantic component tokens added to
platform-tokens.css— buttons, cards, inputs, modals, badges, tooltips, toasts, links, and dividers now have dedicated token sets - New Standard suffix convention documented in style guide:
-dark,-light,-very-light,-secondary,-muted,-faint - New Semantic component token documentation in
tokens.phpwith full usage tables for each category - Improved Google Font imports cleaned across 24 PHP templates — removed unused Bitter and DM Sans font families from
<link>tags - Improved Coach landing pages updated: inline CSS font references migrated from DM Sans to Inter
- Improved Token count updated from 180+ to 280+ across documentation and hero stats
- Improved Changelog CSS now uses design tokens instead of hardcoded hex values
- Fixed Audit score: 87 → 92/100
March 2026
v1.7.0 — Comprehensive Audit & Migration
- New 6 overlay/backdrop tokens added:
--backdrop-light,--backdrop-medium,--backdrop-heavy,--backdrop-brand,--overlay-white,--overlay-surface - New Accessible contrast alternatives:
--color-primary-on-white(#C73E3E, 5.02:1) and--color-ink-faint-accessible(#78716C, 4.6:1) - New Contrast reference table added to
colors.phpdocumentation - New Deprecation timeline for legacy v1.x tokens — v2.0 sunset plan with console warning phase
- New
components/components.css— dedicated component stylesheet separated from token file - Improved Full ARIA + keyboard navigation documentation added to Tabs, Accordion, Tooltip, and Modal components
- Improved Font migration complete across all microsites: Bitter → Fraunces, DM Sans → Inter in 9 CSS files
- Improved Planner hardcoded color sweep: 156 hex → token replacements across 9 CSS files (86% reduction, 361 → 49)
- Improved Modal component documentation now includes parameters table
- Improved Breakpoint documentation updated from 4 to 6 breakpoints matching
platform-tokens.css - Fixed 8 cool gray hex values in
overview.phpand 4 inchangelog.phpreplaced with warm stone palette - Fixed
--phase-reflect-lightcorrected to #A7F3D0; missing-very-lightvariants added - Fixed Hero stats corrected: "15 Components" → "33", "100+ Design Tokens" → "280+"
- Fixed Missing half-step spacing tokens and typography tokens added to documentation
- Fixed
.app-badgecomponent CSS moved out ofplatform-tokens.cssintocomponents.css - Deprecated Legacy token aliases (v1.x names) — scheduled for removal in v2.0
- Fixed Audit score: 62 → 78 → 87/100
March 2026
v1.6.0 — Specialized Components
- New
ws_chip_input()— Multi-value input with removable chip tokens for email lists and tag inputs - New
ws_radio_card_group()— Single-select card grid with icon, title, and description per option - New
ws_checkbox_card_group()— Multi-select card grid for choosing multiple options - New
ws_suggestion_card()— Action-oriented card for AI suggestions and contextual prompts - New
ws_modal_footer()— Standardized modal footer with primary/secondary action buttons - New
ws_activity_badge()— Color-coded activity type badge (exercise/icebreaker/break) - New
ws_results_overlay()— Full-screen/inline overlay for results, scores, and completion states - New
.ws-toggle— Reusable toggle switch CSS extracted from planner patterns - New
.ws-chip— Chip markup pattern with remove button for JS-rendered chips - Improved Component library grid updated with all 7 new component entries and demo pages
- Improved CSS uses platform tokens with hardcoded fallbacks so components work outside the planner
- Improved CLAUDE.md updated with mandatory design system usage rules and full component list
February 2026
v1.5.0 — Developer Experience
- New Copy-to-clipboard button on all
.ds-codeblocks (hover to reveal) - New Responsive preview toolbar (Desktop / Tablet / Mobile) on component demos
- New Live demo for
ws_hero()— full, minimal, and accent variants with rendered output - New Live demo for
ws_listing_card()— workshop, exercise, and icebreaker card examples - Improved Code blocks now show copy button on hover with "Copied" confirmation feedback
- Improved Demo containers auto-wrap with responsive preview controls via shared DS footer
February 2026
v1.4.0 — New Components
- New
ws_section_header()— Page/section titles with subtitle, label, and alignment options - New
ws_feature_card()— Icon + title + description cards with compact and coming-soon variants - New
ws_stat()/ws_stats()— Single metric display and grouped stat rows with dividers - New
ws_checklist()— Icon-prefixed lists with custom icons and compact variant - New
ws_empty_state()— Placeholder with icon, description, and CTA button - New
ws_breadcrumb()— Accessible navigation trail with separator icons - Improved Added animation/transition tokens to
platform-tokens.css - Improved Swept
index.phpandabout/index.phpto use component library - Improved Added storybook-style documentation pages for all new components
- Improved Updated component library grid and sidebar navigation
January 2026
v1.3.0 — Component Library
- New
ws_badge(),ws_duration(),ws_category(),ws_status()— Badge system - New
ws_button(),ws_icon_button()— Button with variants, sizes, loading state - New
ws_input(),ws_select()— Form field components - New
ws_card_start()/ws_card_end()— Card containers - New
ws_avatar()— User avatars with initials fallback - New
ws_modal_start()/ws_modal_end()— Dialogs, drawers, bottom sheets - New
ws_tabs()— Tab navigation - New
ws_tooltip()— Contextual hints on hover/focus - New
ws_accordion()— Collapsible content sections - New
ws_progress()— Progress bars and indeterminate loading - New
ws_alert()— Notification banners with actions - New
ws_skeleton()— Loading placeholder system - New Toast notification JS (
wsToastSuccess,wsToastError, etc.) - New Component documentation pages for each component
December 2025
v1.2.0 — Design System Foundations
- New Design system microsite with sidebar navigation
- New Color palette, typography, spacing, and elevation documentation
- New Platform design tokens (
platform-tokens.css) - New Philosophy, voice & tone, and design decisions pages
- New Icons reference and accessibility guidelines