-
Notifications
You must be signed in to change notification settings - Fork 0
theme.hardcode size
Rule ID:
theme.hardcode-sizeSeverity:WARNCategory:themeTarget Standards: W3C DTCG Spatial Scale Standard, 8pt Modular Grid Rhythm, Tailwind CSS Spacing Architecture, Tailwind CSS Transform Scale Architecture
Detects hardcoded arbitrary size, spacing, or typography scalars in Tailwind utility classes
"Spatial dimensions, spacing intervals, typography sizes, and transform scale modifiers must use standardized modular scale tokens or CSS variables, never arbitrary raw scalar values, non-standard fractional steps, or inline arbitrary scale modifiers."
Embedding arbitrary scalar dimensions (e.g. p-[19px], w-[320px], or text-[15px]), non-standard fractional scales (e.g. p-3.25, w-2.75), or arbitrary inline scale modifiers (e.g. active:scale-[0.99], hover:scale-[1.02]) introduces severe UI design regressions:
- Spatial Rhythm Degradation: Arbitrary pixel/rem values and fractional decimals shatter the visual harmony of 4px/8px modular grid systems.
- Sub-pixel Anti-Aliasing Blur: Fractional step dimensions like p-3.25 (13px) or w-2.75 (11px) fail to align cleanly on various mobile device pixel ratios (DPR), causing fuzzy borders and sub-pixel rendering artifacts.
- False Conformance: Tailwind IntelliSense suggests shorthand decimals (e.g. 'p-[13px] can be written as p-3.25') which pass Tailwind validation without warning, but violate design system consistency.
- Maintenance Overhead: Dispersed magic numbers make global layout scaling and responsive adaptation cumbersome.
- Transform Scale Drift & Subpixel Blurring: Arbitrary inline scale modifiers (e.g. active:scale-[0.99], hover:scale-[1.02], -scale-x-[0.95], [scale:0.98]) fragment tactile physics and micro-interactions across pages, trigger blurry text and 1px borders due to fractional rasterization, and violate centralized token governance.
Charites enforces migrating arbitrary sizing, non-standard fractional utilities, and arbitrary inline scales to standard token steps (e.g. p-3, p-3.5, p-4, w-80, text-base, scale-95, scale-105) or token-backed CSS variables (e.g. scale-[var(--scale-press)]).
| Risk Vector | Severity | Impact |
|---|---|---|
| Visual Rhythm Breakdown | MEDIUM | Inconsistent micro-spacing across components causes fragmented alignment and sloppy UI rendering. |
| Typography Scale Drift | HIGH | Unchecked font sizes degrade readability, leading calculation, and accessibility scaling. |
| Sub-pixel Rendering Artifacts | MEDIUM | Non-standard off-grid decimal scales (e.g. 11px, 13px) produce rounding errors and blurry borders across fractional display scales. |
| Physics & Motion Fragmentation | MEDIUM | Arbitrary inline scale modifiers produce erratic tactile micro-interactions and blurry subpixel text rendering on standard DPI displays. |
<div className="p-[19px] w-[320px] p-3.25 w-2.75 text-[15px]">Hardcoded container</div><div className="active:scale-[0.99] hover:scale-[1.02] -scale-x-[0.95] [scale:0.98]">Arbitrary scale</div><section class="gap-1.25 mt-[27px] [padding:19px]">Arbitrary layout</section><div className="p-3.5 p-4 w-80 text-base">Standard modular container</div><div className="active:scale-95 hover:scale-105 active:scale-[var(--scale-press)]">Standard scale</div><section class="gap-3 mt-6 p-4">Standard layout</section>If this pattern is required for an intentional exception, suppress the diagnostic using the canonical Charites Rule ID:
<!-- charites:ignore theme.hardcode-size intentional exception -->// charites:ignore theme.hardcode-size intentional exceptionrules:
theme.hardcode-size:
severity: warn # error | warn | info | off- Domain Architecture & Analysis Pipeline: See the theme Category Guide.
- 1-SSOT Golden Tri-Corpus Test Matrix: See the Verification Harness on the Master Home page.
- Rule Catalog Index: See Master Wiki Home.
A11y (16 rules)
- A11y Overview
a11y.button-type-missinga11y.dialog-missing-ariaa11y.empty-interactivea11y.error-not-announceda11y.form-input-missing-namea11y.form-label-composite-controla11y.form-label-missing-controla11y.img-missing-alta11y.input-cramped-paddinga11y.input-ios-zoom-hazarda11y.keyboard-trap-missing-escapea11y.label-missing-controla11y.missing-focus-ringa11y.placeholder-as-labela11y.touch-target-sizea11y.touch-target-spacing
Browser (12 rules)
- Browser Overview
browser.appearance-native-overridebrowser.chrome-only-apibrowser.date-input-format-assumptionbrowser.experimental-api-no-featuredetectbrowser.firefox-only-apibrowser.hover-only-interactionbrowser.non-passive-scroll-listenerbrowser.obsolete-vendor-prefixbrowser.safari-only-apibrowser.scrollbar-vendor-incompletebrowser.user-agent-sniffingbrowser.webkit-only-api
Cls (16 rules)
- Cls Overview
cls.client-only-hydration-popcls.collapsible-height-jumpcls.dynamic-content-without-reserved-spacecls.dynamic-table-reflowcls.font-display-missingcls.font-import-late-discoverycls.layout-trigger-animationcls.layout-trigger-transitioncls.text-icon-late-reflowcls.unadjusted-font-metriccls.unconstrained-carouselcls.unreserved-ad-containercls.unreserved-fixed-headercls.unsized-embed-framecls.unsized-imagecls.unstable-scrollbar-gutter
Design (1 rules)
Ergonomy (5 rules)
Inp (16 rules)
- Inp Overview
inp.context-re-render-cascadeinp.expensive-render-computationinp.expensive-style-mutationinp.heavy-event-handlerinp.hydration-contentioninp.hydration-heavy-islandinp.large-interaction-layout-scopeinp.layout-thrashinginp.missing-start-transitioninp.missing-touch-actioninp.render-blocking-scriptinp.repeated-state-updateinp.sync-layout-effectinp.unbounded-collection-renderinp.unbounded-effect-depsinp.unyielded-long-task
Lcp (16 rules)
- Lcp Overview
lcp.blocked-critical-fontlcp.client-only-lcp-contentlcp.critical-head-style-bloatlcp.external-font-discovery-delaylcp.heavy-raster-lcp-assetlcp.image-source-density-mismatchlcp.lazy-loaded-lcp-imagelcp.lcp-content-visibility-suppressionlcp.legacy-critical-font-resourcelcp.missing-critical-origin-hintlcp.missing-lcp-image-preloadlcp.oversized-lcp-resource-selectionlcp.preload-font-cors-mismatchlcp.render-blocking-head-scriptlcp.undiscoverable-lcp-imagelcp.unhinted-lcp-image-priority
Mobile (5 rules)
Performance (16 rules)
- Performance Overview
performance.astro-island-boundary-overlapperformance.astro-over-prefetchingperformance.astro-unnecessary-client-directiveperformance.astro-unoptimized-local-imageperformance.react-context-domain-couplingperformance.react-derived-state-in-effectperformance.react-effect-missing-cleanupperformance.react-index-as-keyperformance.react-inline-prop-memoperformance.react-redundant-function-memoizationperformance.react-static-heavy-importperformance.react-unstable-hook-referenceperformance.tailwind-duplicate-arbitrary-rulesperformance.tailwind-duplicate-utility-definitionperformance.tailwind-dynamic-class-concatenationperformance.tailwind-untracked-package-source
Pwa (10 rules)
- Pwa Overview
pwa.apple-meta-missingpwa.icon-maskable-missingpwa.insecure-context-resourcepwa.manifest-missingpwa.manifest-required-fields-missingpwa.pwa-cache-runtime-api-riskpwa.service-worker-missingpwa.service-worker-no-offline-fallbackpwa.service-worker-registrationpwa.start-url-inconsistency
Responsive (18 rules)
- Responsive Overview
responsive.aspect-ratio-overflowresponsive.container-overconstraintresponsive.desktop-only-contentresponsive.dynamic-viewport-inconsistencyresponsive.fixed-width-overflowresponsive.flex-child-overflowresponsive.fractional-width-gap-driftresponsive.grid-min-columnresponsive.horizontal-overflowresponsive.image-overflowresponsive.keyboard-obstructionresponsive.missing-breakpointresponsive.mobile-density-overloadresponsive.mobile-text-overflowresponsive.safe-area-missingresponsive.unwrapped-table-overflowresponsive.viewport-meta-missingresponsive.viewport-unit-leak
Semantic (1 rules)
Theme (32 rules)
- Theme Overview
theme.apply-bloattheme.backdrop-blur-hardcodetheme.chart-color-hardcodetheme.dual-strategy-collisiontheme.dynamic-classtheme.focus-ring-hardcodetheme.gradient-hardcodetheme.hardcode-border-colortheme.hardcode-border-radiustheme.hardcode-colortheme.hardcode-monochrometheme.hardcode-opacity-colortheme.hardcode-shadow-colortheme.hardcode-sizetheme.hardcode-z-indextheme.hydration-theme-mismatchtheme.image-theme-hardcodetheme.important-overridetheme.inline-style-hardcodetheme.meta-theme-color-mismatchtheme.missing-color-schemetheme.missing-token-fallbacktheme.nested-opacity-contrasttheme.no-reduced-motiontheme.primitive-in-componenttheme.pseudo-hardcode-colortheme.shadow-without-border-darktheme.split-theme-statetheme.svg-hardcode-filltheme.token-source-drifttheme.unlayered-token-definitiontheme.unpaired-dark-variant
Ux (20 rules)
- Ux Overview
ux.camouflaged-linkux.competing-primary-ctaux.destructive-action-unconfirmedux.disabled-control-no-explanationux.empty-collection-unhandledux.missing-autofillux.monolithic-form-bloatux.multiline-input-misuseux.nav-overflow-chunkingux.number-input-identity-misuseux.number-input-missing-boundsux.orphaned-error-stateux.radio-overchoiceux.silent-catch-swallowux.spacing-inversionux.spacing-rhythm-driftux.submit-feedback-missingux.unbounded-async-flagux.unconventional-home-linkux.unthrottled-input-handler