Cursor rule
.cursor/rules/css-standards.mdcWriting CSS, whether inside .css files or in the `{% stylesheet %}…{% endstylesheet %}` or `{% style %}…{% endstyle %}` tags
Cursor rules
Quality
49/100
Scores the file, not the repository.Length
2,876 words
53 headings · 54 code blocksRepository
428
— · pushed 17 days agoLast changed
3 days ago
First indexed 3 days ago.1234567# CSS Standards89## Specificity Rules1011- **Never** use IDs as selectors12- **Avoid** using elements as selectors13- **Avoid** using `!important` at all costs - if you must use it, comment why in the code14- Use a `0 1 0` specificity wherever possible, meaning a single `.class` selector.15- In cases where you must use higher specificity due to a parent/child relationship, try to keep the specificity to a maximum of `0 4 0`16 - Note that this can sometimes be impossible due to the `0 1 0` specificity of pseudo-classes like `:hover`. There may be situations where `.parent:hover .child` is the only way to achieve the desired effect.17- **Avoid** complex selectors. A selector should be easy to understand at a glance. Don't over do it with pseudo selectors (:has, :where, :nth-child, etc).1819See [MDN](mdc:https:/developer.mozilla.org/en-US/docs/Web/CSS/Specificity) for more a comprehensive list of specificity rules.2021### Notes on `:has()` selector and Shopify themes2223The `:has()` selector is incredibly useful, but can impact performance. This is mainly a problem during dynamic DOM updates as the browser engines must re-evaluate `:has()` selectors. This is especially important in Shopify themes where dynamic content updates are common (cart updates, variant selection, filtering, etc.). See [MDN :has performance considerations](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/:has#performance_considerations) for more information.2425Performance mitigation strategies:2627#### Minimize Subtree Traversals2829Anchor of an element as close to the children as possible. i.e. `A:has(B)`, where `A` is the anchor.3031Use combinators like `>` or `+` so there is a very clear path for the browser to evaluate. Anything too broad increases the number of leaf nodes to verify.3233```css34/* ❌ AVOID: May trigger full subtree traversal */35.ancestor:has(.foo) {36 /* Any change within .ancestor requires checking ALL descendants */37}3839/* ✅ GOOD: More constrained - limits traversal */40.ancestor:has(> .foo) {41 /* Only checks direct children */42}43```4445#### Leverage server-rendered classes when possible4647If the dynamic content is being server rendered, you might be able to write a class higher in the DOM than rely on `:has()`4849Example: With filters, instead of checking based on the state of the inner `input` element, create a disabled class.5051```css52/* ❌ AVOID: Styling .filter-label based on child */53.filter-label:has(input[disabled]) {54 /* Disabled styles */55}5657/* ✅ GOOD: .disabled set server side */58.filter-label.disabled {59 /* Disabled styles */60}61```6263This strategy won't work for client-side events, like a `checked`, `selected`, `focus` event.6465## CSS Variables6667CSS variables, a.k.a. custom properties, are a powerful tool for reducing redundancy and making it easier to update values across a component.6869- If you need to hardcode a value, set it to a variable and use that variable in the declaration. Example: a touch target size. `--touch-target-size: 44px;`70- **Never** hardcode colors, always use the color schemes7172### Global Variables7374Global variables should be scoped to the `:root` selector in `snippets/theme-styles-variables.liquid`.7576Example of global variables:7778```css79/* in snippets/theme-styles-variables.liquid */80:root {81 --page-width: 1400px;82 --font-body--family: {{ settings.type_body_font.family }}, {{ settings.type_body_font.fallback_families }}; /* Referencing a theme setting */83 --font-{{ preset_name_dash }}--family: {{ settings[preset_font] | prepend: 'var(--font-' | append: '--family)' }}; /* Using Liquid to set a variable */84}85```8687### Scoped Variables8889Be sure to scope your CSS variables to the component they are being used in, if they are not meant to be global. Scoped variables can reference global variables.9091Example of scoped variables:9293```css94/* in assets/facets.css */95.facets {96 --drawer-padding: var(--padding-md); /* Referencing a global variable */97 --facets-upper-z-index: 3;98 --facets-open-z-index: 4;99100 --facets-clear-shadow: 0px -4px 14px 0px rgb(var(--color-foreground-rgb) / var(--opacity-10)); /* Referencing a Color Scheme variable */101}102```103104### Namespace Your CSS Variables105106Namespace your variables to avoid collisions unless you explicitly want them to bleed through to other components.107108✅ Do this:109110```css111.component {112 --component-padding: ...;113 --component-aspect-ratio: ...;114}115```116117❌ Don't do this:118119```css120.component {121 --padding: ...;122 --aspect-ratio: ...;123}124```125126### Semantic Color Variables127128Use semantic naming for better maintainability:129130```css131:root {132 /* Base colors */133 --color-primary: {{ settings.colors_accent_1 }};134 --color-secondary: {{ settings.colors_accent_2 }};135136 /* Semantic colors */137 --color-foreground-muted: rgb(var(--color-rgb) / 0.6);138 --color-text-disabled: rgb(var(--color-rgb) / 0.38);139140 /* Interactive states */141 --hover-color: var(--link-text-color-rgb, var(--color-foreground-rgb));142 --color-active: var(--color-foreground);143}144```145146### Design Token System147148Establish consistent spacing and typography scales:149150```css151:root {152 /* Spacing scale */153 --space-3xs: 0.25rem; /* 4px */154 --space-2xs: 0.5rem; /* 8px */155 --space-xs: 0.75rem; /* 12px */156 --space-sm: 1rem; /* 16px */157 --space-md: 1.5rem; /* 24px */158 --space-lg: 2rem; /* 32px */159 --space-xl: 3rem; /* 48px */160 --space-2xl: 4rem; /* 64px */161 --space-3xl: 6rem; /* 96px */162163 /* Typography scale */164 --font-size-xs: 0.75rem; /* 12px */165 --font-size-sm: 0.875rem; /* 14px */166 --font-size-base: 1rem; /* 16px */167 --font-size-lg: 1.125rem; /* 18px */168 --font-size-xl: 1.25rem; /* 20px */169 --font-size-2xl: 1.5rem; /* 24px */170 --font-size-3xl: 1.875rem; /* 30px */171}172```173174## Scoping CSS to Instances of Sections and Blocks175176Reset CSS variable values inline on a `style` attribute with a section/block settings. This has a couple benefits:177178- Less CSS in Liquid which allows us to use the `{% stylesheet %}` tag for all CSS.179- Reduces redundancy in CSS selectors and number of selectors in the HTML, i.e. `.selector--{{ block.id }}` pattern.180181✅ Do this:182183```html184<section185 style="186 --background-color: {{ settings.background_color }};187 --padding: {{ settings.padding }}px;188 "189>190 ...191</section>192193<button style="--button-color: {{ settings.button_color }};">...</button>194```195196❌ Don't do this:197198```html199{% style %} .selector--{{ block.id }} { --button-color: {{ settings.button_color }}; } {% endstyle %}200201<button class="selector--{{ block.id }}">...</button>202```203204### Redundancy205206Use variables to reduce property assignment redundancy.207208```css209/* Do this */210.block-name {211 background: rgb(var(--block-name-color) / 0.75);212}213214.block-name--secondary {215 --block-name-color: var(--secondary-color);216}217218/* Not this */219.block-name {220 background: rgb(var(--primary-color) / 0.75);221}222223.block-name--secondary {224 background: rgb(var(--secondary-color) / 0.75);225}226```227228## BEM Naming Convention229230Use the @BEM CSS convention for class names.231232BEM TL;DR:233234- **Block**: Component name (`.product-card`)235- **Element**: Block + element (`.product-card__title`)236- **Modifier**: Block/element + modifier (`.product-card--featured`)237- **Use dashes** to separate words in names238239```css240/* Good BEM structure */241.product-card {242}243.product-card__image {244}245.product-card__title {246}247.product-card__price {248}249.product-card--featured {250}251.product-card__title--large {252}253```254255```css256.block {257 ...;258}259.block--modifier {260 ...;261}262.block__element {263 ...;264}265.block__multi-word-element {266 ...;267}268.block__element--modifier {269 ...;270}271.block__element--multi-word-modifier {272 ...;273}274```275276Dashes are used to separate words in blocks, elements, and modifiers.277278Exception: We also use global @utility classes that can be applied to block and and elements without following BEM naming convention.279280### Naming a "Block" (component)281282The root "block" namespace must wrap any elements derived from it.283284✅ Do this:285286```html287<div class="my-component">288 <div class="my-component__wrapper"></div>289</div>290```291292❌ Not this:293294`.my-component__wrapper` is used as a parent to `.my-component`.295296```html297<div class="my-component__wrapper my-component--page-width">298 <div class="my-component"></div>299</div>300```301302### Naming an "Element" (child)303304There should only be a _single_ "element" in a classname. Only the root "block" name needs to be included in child classnames. If additional naming specificity is necessary, use a "-" to seperate words or consider starting a new BEM scope altogether when an element could make sense as a standalone entity.305306✅ Do this:307308```html309<div class="my-component my-component--full-width">310 <div class="my-component__wrapper">311 <button class="my-component__button">312 <span class="my-component__button-label">My button</span>313 </button>314 </div>315</div>316```317318✅ Or this:319320Started new scope with `.button-component`.321322```html323<div class="my-component my-component--full-width">324 <div class="my-component__wrapper">325 <button class="button-component">326 <span class="button-component__label">My button</span>327 </button>328 </div>329</div>330```331332❌ Not this:333334Multiple element names are used (`__wrapper__button__label`).335336```html337<div class="my-component my-component--full-width">338 <div class="my-component__wrapper">339 <button class="my-component__wrapper__button">340 <span class="my-component__wrapper__button__label">My button</span>341 </button>342 </div>343</div>344```345346### Naming a "Modifier" (variant)347348Any "modifier" classname should always use a "--" and should always correspond to an existing block and element namespace. Never use a modifier class on an element that doesn't also have a base classname.349350✅ Do this:351352The `.button` class is the base classname and modified by `--secondary`.353354```html355<button class="button button--secondary"></button>356```357358❌ Not this:359360The `.button` and `.button-secondary` classes are both named as _exclusive_ components and should not used together.361362```html363<button class="button button-secondary"></button>364```365366❌ Or this:367368Modifer class is used without corresponding base classname.369370```html371<button class="button--secondary"></button>372```373374Also consider keeping modifiers at the highest element that makes sense. This makes the component more extensible and resilient as styling needs are changed or added in the future.375376✅ Do this:377378```html379<div class="my-component my-component--size-large my-component--page-width">380 <div class="my-component__wrapper"></div>381</div>382```383384### Utility Classes385386Utility classes are intended to act as global overrides for a single styling decision, e.g. alignment, show/hide, etc. BEM conventions are not followed, there is no hierarchy in utility classes and utility classes do not assume they are used with any particular block or element.387388Name multi-word utility classes with hyphens `-`. Append any viewport specifications at the **end**, e.g. `hidden-mobile`.389390✅ This is fine:391392```css393.align-left {394 text-align: left;395}396```397398```html399<div class="my-component align-left">400 <p class="my-component__text"></p>401</div>402```403404## Modern CSS Features405406### Container Queries407408Use container queries for truly responsive components:409410```css411.product-grid {412 container-type: inline-size;413}414415@container (min-width: 400px) {416 .product-card {417 display: grid;418 grid-template-columns: 1fr 1fr;419 }420}421```422423### CSS Functions424425Leverage modern CSS functions for better responsiveness:426427```css428.component {429 /* Fluid spacing */430 padding: clamp(1rem, 4vw, 3rem);431432 /* Intrinsic sizing */433 width: min(100%, 800px);434435 /* Dynamic colors */436 /* color-mix isn't supported in earlier version of iOS <16.2 so limit its usage */437 background: color-mix(in srgb, rgb(var(--color-primary)) 90%, white);438}439```440441### Cascade Layers442443For better CSS organization in complex themes:444445```css446@layer reset, base, components, utilities, overrides;447448@layer components {449 .button {450 /* Component styles here won't conflict with utilities */451 }452}453```454455### View Transitions456457```css458@view-transition {459 navigation: auto;460}461462.page-content {463 view-transition-name: main-content;464}465```466467## Media Queries468469- Default to mobile first. e.g. `min-width` queries470- Use `screen` for all media queries471472### Breakpoint System473474Define consistent breakpoints:475476```css477/* Mobile first breakpoints */478--breakpoint-sm: 576px; /* Small devices */479--breakpoint-md: 768px; /* Medium devices */480--breakpoint-lg: 992px; /* Large devices */481--breakpoint-xl: 1200px; /* Extra large devices */482--breakpoint-2xl: 1400px; /* 2X Extra large devices */483```484485### Context-Aware Queries486487Use feature queries alongside media queries:488489```css490@supports (display: grid) {491 .product-grid {492 display: grid;493 grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));494 }495}496497@supports not (display: grid) {498 .product-grid {499 display: flex;500 flex-wrap: wrap;501 }502}503```504505### Print Styles506507Always consider print stylesheets:508509```css510@media print {511 .no-print {512 display: none !important;513 }514515 a[href^='http']:after {516 content: ' (' attr(href) ')';517 }518}519```520521## CSS Nesting Rules522523Nesting can make styles harder to read. Be responsible with it.524525- **No `&` operator** in nested selectors526- **Never nest beyond first level** (except media queries/states)527- **Keep nesting simple** and readable528- Only use `&` when there is a direct relationship between the two selectors529 - State based selectors e.g. `&:hover`, `&:focus`, `&:active`530 - Modifiers that affect each other e.g. `button--integrated { &.button--text }`531- Never nest beyond the first level532- See below for exceptions533534### Nesting Media Queries535536Use nesting for media queries537538```css539.header {540 width: 100%;541542 @media screen and (min-width: 750px) {543 width: 100px;544 }545}546```547548This includes when there is nothing to override, e.g.549550```css551.header {552 @media screen and (min-width: 750px) {553 width: 100px;554 }555}556```557558That way, if something needs to be added later, it can just be added without needing to flip the media query to the inside.559560### If-like Parent-Child Relationships561562You may use nesting to help organize parent-child relationship when the parent can have **multiple states or modifiers** that affect children. In the example below, a number of child selectors need to change when the parent is the `--full-width` variant. This saves you from needing to append `parent--full-width` to each css selector.563564```css565.parent {566 grid-columns: var(--gap) 1fr var(--gap);567}568569.child {570 grid-column: 2;571}572573.grand-child {574 ...;575}576577.parent--full-screen {578 grid-columns: 1fr;579580 .child {581 grid-column: 1;582 }583584 .grand-child {585 ...;586 }587}588```589590In cases like this, the styles that are being applied are the direct result of the parent's modifier. We can see this as a kind of if-like relationship where the logic is easier to follow if the child styles are nested inside the parent.591592This is not a reason to nest multiple levels. Maintain the single level rule.593594## Logical Properties595596Where appropriate, use logical properties to have baseline support for Right-to-Left (RTL) languages.597Focusing on these properties:598599- padding600- margin601- border602- text-align603- top, bottom, left, right604605✅ Do this:606607```css608.element {609 padding-inline: 2rem;610 padding-block: 1rem;611 margin-inline: auto;612 margin-block: 0;613 border-inline-end: 1rem solid var(--color-background);614 text-align: start;615 inset: 0;616}617```618619❌ Not this:620621```css622.element {623 padding: 1rem 2rem;624 margin: 0 auto;625 border-bottom: 1rem solid var(--color-background);626 text-align: left;627 top: 0;628 bottom: 0;629 left: 0;630 right: 0;631}632```633634## Layout Patterns635636### CSS Grid for Layouts637638```css639.section-content {640 display: grid;641 grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));642 gap: var(--spacing-lg);643}644```645646### Flexbox for Components647648```css649.product-card {650 display: flex;651 flex-direction: column;652 gap: var(--spacing-sm);653}654```655656### Aspect Ratio for Media657658```css659.product-card__image {660 aspect-ratio: 4 / 3;661 object-fit: cover;662}663```664665## Fancy Selectors666667### Using `:is()`668669When giving the same styles to multiple selectors, use a comma separated list.670671✅ Do this:672673```css674.facets__label,675.facets__clear-all,676.clear-filter {677 ...;678}679```680681❌ Not this:682683```css684:is(.facets__label, .facets__clear-all, .clear-filter) {685 ...;686}687```688689However, if you are giving the same styles to a parent-child relationship with different selectors, you may use `:is()`.690691✅ Do this:692693```css694.parent:is(.child-1, .child-2) {695 ...;696}697```698699❌ Not this:700701```css702.parent .child-1,703.parent .child-2 {704 ...;705}706```707708✅ Do this:709710```css711:is(.parent, .parent-2) .child {712 ...;713}714```715716❌ Not this:717718```css719.parent .child,720.parent-2 .child {721 ...;722}723```724725Try to keep the same specificity for all selectors within a single `:is()` to avoid increasing the overall specificity of the selector unintentionally.726727## Accessibility728729### Motion and Animation730731- Always respect user motion preferences732- Provide fallbacks for users who prefer reduced motion733734```css735@media (prefers-reduced-motion: reduce) {736 *,737 *::before,738 *::after {739 animation-duration: 0.01ms !important;740 animation-iteration-count: 1 !important;741 transition-duration: 0.01ms !important;742 scroll-behavior: auto !important;743 }744}745```746747### Focus Management748749- Ensure all interactive elements have visible focus indicators750- Use `:focus-visible` for better UX751752```css753.button:focus-visible {754 outline: 2px solid rgb(var(--color-focus));755 outline-offset: 2px;756}757```758759### Color and Contrast760761- Maintain WCAG AA contrast ratios (4.5:1 for normal text, 3:1 for large text)762- Test with high contrast mode763- Never rely solely on color to convey information764765```css766@media (prefers-color-scheme: dark) {767 :root {768 /* Dark theme variables */769 }770}771```772773## Performance Considerations774775### Animation Performance776777- Use `transform` and `opacity` for animations778- Avoid animating layout properties (`width`, `height`, `margin`, `padding`)779- Use `will-change` sparingly and remove after animation780781```css782.product-card {783 transition: transform 0.2s ease;784}785786.product-card:hover {787 transform: translateY(-2px); /* Better than animating top/margin */788}789790/* Only use will-change during animation */791.product-card:hover {792 will-change: transform;793}794795.product-card:not(:hover) {796 will-change: auto;797}798```799800### Layout Performance801802- Use `contain` property for better rendering performance803- Prefer CSS Grid and Flexbox over complex positioning804805```css806.product-grid {807 contain: content;808 display: grid;809 grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));810}811```812813## CSS Organization814815### CSS Property Order816817Maintain consistent property order within declarations:818819```css820.component {821 /* 1. Layout & Positioning */822 position: relative;823 display: flex;824 flex-direction: column;825826 /* 2. Box Model */827 width: 100%;828 margin: 0;829 padding: var(--space-md);830 border: 1px solid rgb(var(--color-border));831832 /* 3. Typography */833 font-family: var(--font-body-family);834 font-size: var(--font-size-base);835836 /* 4. Visual */837 background: rgb(var(--color-surface));838 color: rgb(var(--color-text));839840 /* 5. Animation & Transforms */841 transition: transform 0.2s ease;842}843```844845## Error Prevention846847### Common Pitfalls848849- **Never** use `position: fixed` without considering mobile keyboards850- **Always** test with zoom up to 200%851- **Avoid** magic numbers - use variables or calc() instead852- **Remember** that `vh` units can be problematic on mobile, use `dvh` to mitage this853854### Defensive CSS855856Write CSS that gracefully handles edge cases:857858```css859.product-card {860 /* Prevent content overflow */861 word-wrap: break-word;862 overflow-wrap: break-word;863864 /* Handle long content */865 min-width: 0; /* Allows flex items to shrink below content size */866867 /* Prevent layout shift */868 aspect-ratio: 1 / 1;869870 /* Fallback for missing images */871 background: rgb(var(--color-surface-secondary));872}873```874875### Browser Support876877- Test in browsers used by your audience878- Provide fallbacks for newer CSS features879- Use progressive enhancement approach880881## CSS Documentation882883### Commenting Standards884885Use consistent commenting for better maintainability:886887```css888/* =============================================================================889 Component Name890 ============================================================================= */891892/**893 * Brief component description894 *895 * @example896 * <div class="component component--modifier">897 * <div class="component__element">Content</div>898 * </div>899 */900.component {901 /* Implementation */902}903904/* Component modifiers905 ========================================================================== */906907/**908 * Modifier description909 */910.component--modifier {911 /* Modifier styles */912}913914/* Component elements915 ========================================================================== */916917/**918 * Element description919 */920.component__element {921 /* Element styles */922}923```924925## Example Component Structure926927```liquid928{% stylesheet %}929 .featured-collection {930 --section-padding: {{ section.settings.padding | default: 60 }}px;931 --bg-color: {{ section.settings.background_color | default: '#ffffff' }};932 --color: {{ section.settings.text_color | default: '#000000' }};933934 padding: var(--section-padding) 0;935 background-color: var(--bg-color);936 color: var(--color);937 container-type: inline-size;938 }939940 .featured-collection__grid {941 display: grid;942 grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));943 gap: var(--spacing-md);944 }945946 @container (min-width: 768px) {947 .featured-collection__grid {948 grid-template-columns: repeat({{ section.settings.columns | default: 4 }}, 1fr);949 }950 }951952 @media (prefers-reduced-motion: reduce) {953 .featured-collection * {954 transition: none !important;955 }956 }957{% endstylesheet %}958```959
Also in Shopify/horizon
Diff this repo’s formatsOne repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| Shopify/horizon.cursor/rules/accordion-accessibility.mdc · 428 | Cursor rules | ui | 40/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/animation-accessibility.mdc · 428 | Cursor rules | ui | 40/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/blocks.mdc · 428 | Cursor rules | stylearchtypesdatabase+2 | 62/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/breadcrumb-accessibility.mdc · 428 | Cursor rules | ui | 36/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/carousel-accessibility.mdc · 428 | Cursor rules | ui | 32/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/cart-drawer-accessibility.mdc · 428 | Cursor rules | ui | 40/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/chat-window-accessibility.mdc · 428 | Cursor rules | styleui | 24/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/color-contrast-accessibility.mdc · 428 | Cursor rules | lint-formatui | 44/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/color-swatch-accessibility.mdc · 428 | Cursor rules | ui | 40/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/commit-messages.mdc · 428 | Cursor rules | setuplint-formattypesgit | 62/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/disclosure-accessibility.mdc · 428 | Cursor rules | ui | 40/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/dropdown-navigation-accessibility.mdc · 428 | Cursor rules | styleui | 36/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/flip-card-accessibility.mdc · 428 | Cursor rules | styleui | 36/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/form-accessibility.mdc · 428 | Cursor rules | ui | 32/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/javascript-standards.mdc · 428 | Cursor rules | stylearchtypesui+2 | 54/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/landmark-accessibility.mdc · 428 | Cursor rules | ui | 40/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/liquid.mdc · 428 | Cursor rules | buildstyletypesdatabase+2 | 77/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/locales.mdc · 428 | Cursor rules | arch | 49/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/localization.mdc · 428 | Cursor rules | style | 54/100 | 3 days ago | |
| Shopify/horizon.cursor/rules/mobile-accessibility-standards.mdc · 428 | Cursor rules | styleui | 36/100 | 3 days ago |
Diff against .cursor/rules/accordion-accessibility.mdc Diff against .cursor/rules/animation-accessibility.mdc Diff against .cursor/rules/blocks.mdc Diff against .cursor/rules/breadcrumb-accessibility.mdc Diff against .cursor/rules/carousel-accessibility.mdc Diff against .cursor/rules/cart-drawer-accessibility.mdc Diff against .cursor/rules/chat-window-accessibility.mdc Diff against .cursor/rules/color-contrast-accessibility.mdc Diff against .cursor/rules/color-swatch-accessibility.mdc Diff against .cursor/rules/commit-messages.mdc Diff against .cursor/rules/disclosure-accessibility.mdc Diff against .cursor/rules/dropdown-navigation-accessibility.mdc Diff against .cursor/rules/flip-card-accessibility.mdc Diff against .cursor/rules/form-accessibility.mdc Diff against .cursor/rules/javascript-standards.mdc Diff against .cursor/rules/landmark-accessibility.mdc Diff against .cursor/rules/liquid.mdc Diff against .cursor/rules/locales.mdc Diff against .cursor/rules/localization.mdc Diff against .cursor/rules/mobile-accessibility-standards.mdc
