ui-ux-pro-max-skill/cli/assets/data/ux-guidelines.csv
Viet Tran a38d04c3d5
feat(search): overhaul relevance and curated design data
Overhaul BM25 relevance, reasoning and data-quality contracts; refresh UI styles and framework guidance; add resilient text, chip, badge and micro-interaction guidance; strengthen release, provenance and catalog refresh gates; update bilingual documentation.
2026-08-14 00:08:23 +07:00

27 KiB

1NoCategoryIssuePlatformDescriptionDoDon'tCode Example GoodCode Example BadSeverity
21NavigationSmooth ScrollWebAnchor links should scroll smoothly to target sectionUse scroll-behavior: smooth on html elementJump directly without transitionhtml { scroll-behavior: smooth; }<a href='#section'> without CSSHigh
32NavigationSticky NavigationWebFixed nav should not obscure contentAdd padding-top to body equal to nav heightLet nav overlap first section contentpt-20 (if nav is h-20)No padding compensationMedium
43NavigationActive StateAllCurrent page/section should be visually indicatedHighlight active nav item with color/underlineNo visual feedback on current locationtext-primary border-b-2All links same styleMedium
54NavigationBack ButtonMobileUsers expect back to work predictablyPreserve navigation history properlyBreak browser/app back button behaviorhistory.pushState()location.replace()High
65NavigationDeep LinkingAllURLs should reflect current state for sharingUpdate URL on state/view changesStatic URLs for dynamic contentUse query params or hashSingle URL for all statesMedium
76NavigationBreadcrumbsWebShow user location in site hierarchyUse for sites with 3+ levels of depthUse for flat single-level sitesHome > Category > ProductOnly on deep nested pagesLow
87AnimationExcessive MotionAllToo many animations cause distraction and motion sicknessAnimate 1-2 key elements per view maximumAnimate everything that movesSingle hero animationanimate-bounce on 5+ elementsHigh
98AnimationDuration TimingAllMotion duration depends on distance complexity platform and user contextUse shared motion tokens and test that feedback stays responsivePresent 150-300ms or any cutoff as a universal requirementtransition-colors duration-200One duration copied to every transitionMedium
109AnimationReduced MotionAllRespect user's motion preferencesCheck prefers-reduced-motion media queryIgnore accessibility motion settings@media (prefers-reduced-motion: reduce)No motion query checkHigh
1110AnimationLoading StatesAllShow feedback during async operationsUse skeleton screens or spinnersLeave UI frozen with no feedbackanimate-pulse skeletonBlank screen while loadingHigh
1211AnimationHover vs TapAllHover effects don't work on touch devicesUse click/tap for primary interactionsRely only on hover for important actionsonClick handleronMouseEnter onlyHigh
1312AnimationContinuous AnimationAllInfinite animations are distractingUse for loading indicators onlyUse for decorative elementsanimate-spin on loaderanimate-bounce on iconsMedium
1413AnimationTransform PerformanceWebSome CSS properties trigger expensive repaintsUse transform and opacity for animationsAnimate width/height/top/left propertiestransform: translateY()top: 10px animationMedium
1514AnimationEasing FunctionsAllEasing should match how an element changes speed and purposeUse deceleration when arriving acceleration when leaving and linear for constant-rate progressReject linear easing even for steady rotation or progressease-out for entry; linear for spinnerease-in-out for every motionLow
1615LayoutZ-Index ManagementWebStacking context conflicts cause hidden elementsDefine z-index scale system (10 20 30 50)Use arbitrary large z-index valuesz-10 z-20 z-50z-[9999]High
1716LayoutOverflow HiddenWebHidden overflow can clip important contentTest all content fits within containersBlindly apply overflow-hiddenoverflow-auto with scrolloverflow-hidden truncating contentMedium
1817LayoutFixed PositioningWebFixed elements can overlap or be inaccessibleAccount for safe areas and other fixed elementsStack multiple fixed elements carelesslyFixed nav + fixed bottom with gapMultiple overlapping fixed elementsMedium
1918LayoutStacking ContextWebNew stacking contexts reset z-indexUnderstand what creates new stacking contextExpect z-index to work across contextsParent with z-index isolates childrenz-index: 9999 not workingMedium
2019LayoutContent JumpingWebImages badges validation text and skeleton replacements can shift nearby content when they updateReserve appropriate space or keep async states in a stable content-driven containerInsert compact text or media without a layout strategyaspect-ratio for media; stable count slot for badgesBadge insertion pushes toolbar actionsHigh
2120LayoutViewport UnitsWeb100vh can be problematic on mobile browsersUse dvh or account for mobile browser chromeUse 100vh for full-screen mobile layoutsmin-h-dvh or min-h-screenh-screen on mobileMedium
2221LayoutContainer WidthWebContent too wide is hard to readLimit max-width for text content (65-75ch)Let text span full viewport widthmax-w-prose or max-w-3xlFull width paragraphsMedium
2322TouchTouch Target SizeMobileTouch target guidance depends on platform and web contextUse 44pt on iOS and 48dp on Android; for web use the separate WCAG Target Size ruleTreat one unit or minimum as universal across platformsiOS 44pt; Android 48dp; Web 24 CSS px plus WCAG exceptionsw-6 h-6 buttonsHigh
2423TouchTouch SpacingMobileAdjacent touch targets need adequate spacingMinimum 8px gap between touch targetsTightly packed clickable elementsgap-2 between buttonsgap-0 or gap-1Medium
2524TouchGesture ConflictsMobileCustom gestures can conflict with systemAvoid horizontal swipe on main contentOverride system gesturesVertical scroll primaryHorizontal swipe carousel onlyMedium
2625TouchTap DelayMobile300ms tap delay feels laggyUse touch-action CSS or fastclickDefault mobile tap handlingtouch-action: manipulationNo touch optimizationMedium
2726TouchPull to RefreshMobileAccidental refresh is frustratingDisable where not neededEnable by default everywhereoverscroll-behavior: containDefault overscrollLow
2827TouchHaptic FeedbackMobileTactile feedback improves interaction feelUse for confirmations and important actionsOveruse vibration feedbacknavigator.vibrate(10)Vibrate on every tapLow
2928InteractionFocus StatesAllKeyboard focus, including controls inside a modal, needs a visible indicatorUse a visible focus ring on every interactive control, including modal controlsRemove focus outline without replacementfocus:ring-2 focus:ring-blue-500outline-none without alternativeHigh
3029InteractionHover StatesWebVisual feedback on interactive elementsChange cursor and add subtle visual changeNo hover feedback on clickable elementshover:bg-gray-100 cursor-pointerNo hover styleMedium
3130InteractionActive StatesAllShow immediate feedback on press/clickAdd pressed/active state visual changeNo feedback during interactionactive:scale-95No active stateMedium
3231InteractionDisabled StatesAllClearly indicate non-interactive elementsReduce opacity and change cursorConfuse disabled with normal stateopacity-50 cursor-not-allowedSame style as enabledMedium
3332InteractionLoading ButtonsAllPrevent double submission during async actionsDisable button and show loading stateAllow multiple clicks during processingdisabled={loading} spinnerButton clickable while loadingHigh
3433InteractionError FeedbackAllUsers need to know when something failsShow clear error messages near problemSilent failures with no feedbackRed border + error messageNo indication of errorHigh
3534InteractionSuccess FeedbackAllConfirm successful actions to usersShow success message or visual changeNo confirmation of completed actionToast notification or checkmarkAction completes silentlyMedium
3635InteractionConfirmation DialogsAllPrevent accidental destructive actionsConfirm before delete/irreversible actionsDelete without confirmationAre you sure modalDirect delete on clickHigh
3736AccessibilityColor ContrastAllText must be readable against backgroundMinimum 4.5:1 ratio for normal textLow contrast text#333 on white (7:1)#999 on white (2.8:1)High
3837AccessibilityColor OnlyAllDon't convey information by color aloneUse icons/text in addition to colorRed/green only for error/successRed text + error iconRed border only for errorHigh
3938AccessibilityAlt TextAllImages need text alternativesDescriptive alt text for meaningful imagesEmpty or missing alt attributesalt='Dog playing in park'alt='' for content imagesHigh
4039AccessibilityHeading HierarchyWebScreen readers use headings for navigationUse sequential heading levels h1-h6Skip heading levels or misuse for stylingh1 then h2 then h3h1 then h4Medium
4140AccessibilityARIA LabelsAllInteractive elements need accessible namesAdd aria-label for icon-only buttonsIcon buttons without labelsaria-label='Close menu'<button><Icon/></button>High
4241AccessibilityKeyboard NavigationWebWeb users need complete keyboard navigation with visible focus on every operable controlKeep tab order aligned with visual order and test every action without a pointerKeyboard traps or illogical tab ordertabIndex for custom orderUnreachable elementsHigh
4342AccessibilityScreen ReaderAllContent should make sense when read aloudUse semantic HTML and ARIA properlyDiv soup with no semantics<nav> <main> <article><div> for everythingMedium
4443AccessibilityForm LabelsAllInputs must have associated labelsUse label with for attribute or wrap inputPlaceholder-only inputs<label for='email'>placeholder='Email' onlyHigh
4544AccessibilityError MessagesAllError messages must be announcedUse aria-live or role=alert for errorsVisual-only error indicationrole='alert'Red border onlyHigh
4645AccessibilitySkip LinksWebAllow keyboard users to skip navigationProvide skip to main content linkNo skip link on nav-heavy pagesSkip to main content link100 tabs to reach contentMedium
4746PerformanceImage OptimizationAllLarge images slow page loadUse appropriate size and format (WebP)Unoptimized full-size imagessrcset with multiple sizes4000px image for 400px displayHigh
4847PerformanceLazy LoadingAllLoad content as neededLazy load below-fold images and contentLoad everything upfrontloading='lazy'All images eager loadMedium
4948PerformanceCode SplittingWebLarge bundles slow initial loadSplit code by route/featureSingle large bundledynamic import()All code in main bundleMedium
5049PerformanceCachingWebRepeat visits should be fastSet appropriate cache headersNo caching strategyCache-Control headersEvery request hits serverMedium
5150PerformanceFont LoadingWebWeb fonts can block renderingUse font-display swap or optionalInvisible text during font loadfont-display: swapFOIT (Flash of Invisible Text)Medium
5251PerformanceThird Party ScriptsWebExternal scripts can block renderingLoad non-critical scripts async/deferSynchronous third-party scriptsasync or defer attribute<script src='...'> in headMedium
5352PerformanceBundle SizeWebLarge JavaScript slows interactionMonitor and minimize bundle sizeIgnore bundle size growthBundle analyzerNo size monitoringMedium
5453PerformanceRender BlockingWebCSS/JS can block first paintInline critical CSS defer non-criticalLarge blocking CSS filesCritical CSS inlineAll CSS in headMedium
5554FormsInput LabelsAllEvery input needs a visible labelAlways show label above or beside inputPlaceholder as only label<label>Email</label><input>placeholder='Email' onlyHigh
5655FormsError PlacementAllEach invalid field needs an inline error connected to that fieldShow a specific error below the input and reference it with aria-describedbyShow only a top-level error without identifying each invalid field<input aria-describedby="email-error"><p id="email-error">Enter an email address</p>Red border or summary onlyHigh
5756FormsInline ValidationAllValidate as user types or on blurValidate on blur for most fieldsValidate only on submitonBlur validationSubmit-only validationMedium
5857FormsInput TypesAllUse appropriate input typesUse email tel number url etcText input for everythingtype='email'type='text' for emailMedium
5958FormsAutofill SupportWebHelp browsers autofill correctlyUse autocomplete attribute properlyBlock or ignore autofillautocomplete='email'autocomplete='off' everywhereMedium
6059FormsRequired IndicatorsAllMark required fields clearlyUse asterisk or (required) textNo indication of required fields* required indicatorGuess which are requiredMedium
6160FormsPassword VisibilityAllLet users see password while typingToggle to show/hide passwordNo visibility toggleShow/hide password buttonPassword always hiddenMedium
6261FormsSubmit FeedbackAllConfirm form submission statusShow loading then success/error stateNo feedback after submitLoading -> Success messageButton click with no responseHigh
6362FormsInput AffordanceAllInputs should look interactiveUse distinct input stylingInputs that look like plain textBorder/background on inputsBorderless inputsMedium
6463FormsMobile KeyboardsMobileShow appropriate keyboard for input typeUse inputmode attributeDefault keyboard for all inputsinputmode='numeric'Text keyboard for numbersMedium
6564ResponsiveMobile FirstWebDesign for mobile then enhance for largerStart with mobile styles then add breakpointsDesktop-first causing mobile issuesDefault mobile + md: lg: xl:Desktop default + max-width queriesMedium
6665ResponsiveBreakpoint TestingWebTest at all common screen sizesTest at 320 375 414 768 1024 1440Only test on your deviceMultiple device testingSingle device developmentMedium
6766ResponsiveTouch FriendlyWebMobile layouts need touch-sized targetsIncrease touch targets on mobileSame tiny buttons on mobileLarger buttons on mobileDesktop-sized targets on mobileHigh
6867ResponsiveReadable Font SizeAllText must be readable on all devicesMinimum 16px body text on mobileTiny text on mobiletext-base or largertext-xs for body textHigh
6968ResponsiveViewport MetaWebSet viewport for mobile devicesUse width=device-width initial-scale=1Missing or incorrect viewport<meta name='viewport'...>No viewport meta tagHigh
7069ResponsiveHorizontal ScrollWebAvoid horizontal scrollingEnsure content fits viewport widthContent wider than viewportmax-w-full overflow-x-hiddenHorizontal scrollbar on mobileHigh
7170ResponsiveImage ScalingWebImages should scale with containerUse max-width: 100% on imagesFixed width images overflowmax-w-full h-autowidth='800' fixedMedium
7271ResponsiveTable HandlingWebTables can overflow on mobileUse horizontal scroll or card layoutWide tables breaking layoutoverflow-x-auto wrapperTable overflows viewportMedium
7372TypographyLine HeightAllAdequate line height improves readabilityUse 1.5-1.75 for body textCramped or excessive line heightleading-relaxed (1.625)leading-none (1)Medium
7473TypographyLine LengthWebLong lines are hard to readLimit to 65-75 characters per lineFull-width text on large screensmax-w-proseFull viewport width textMedium
7574TypographyFont Size ScaleAllConsistent type hierarchy aids scanningUse consistent modular scaleRandom font sizesType scale (12 14 16 18 24 32)Arbitrary sizesMedium
7675TypographyFont LoadingWebFonts should load without layout shiftReserve space with fallback fontLayout shift when fonts loadfont-display: swap + similar fallbackNo fallback fontMedium
7776TypographyContrast ReadabilityAllBody text needs good contrastUse darker text on light backgroundsGray text on gray backgroundtext-gray-900 on whitetext-gray-400 on gray-100High
7877TypographyHeading ClarityAllHeadings should stand out from bodyClear size/weight differenceHeadings similar to body textBold + larger sizeSame size as bodyMedium
7978FeedbackLoading IndicatorsAllLoading feedback should match the expected wait and avoid flashing for near-instant workFollow platform and component guidance; preserve layout focus and accessible busy statusApply one timing threshold to every operation or leave long waits unexplainedStable skeleton or progress with aria-busyFlickering spinner or frozen UIHigh
8079FeedbackEmpty StatesAllGuide users when no content existsShow helpful message and actionBlank empty screensNo items yet. Create one!Empty white spaceMedium
8180FeedbackError RecoveryAllHelp users recover from errorsProvide clear next stepsError without recovery pathTry again button + help linkError message onlyMedium
8281FeedbackProgress IndicatorsAllShow progress for multi-step processesStep indicators or progress barNo indication of progressStep 2 of 4 indicatorNo step informationMedium
8382FeedbackToast NotificationsAllTransient messages for non-critical infoAuto-dismiss after 3-5 secondsToasts that never disappearAuto-dismiss toastPersistent toastMedium
8483FeedbackConfirmation MessagesAllConfirm successful actionsBrief success messageSilent successSaved successfully toastNo confirmationMedium
8584ContentTruncationAllHandle long content gracefullyTruncate with ellipsis and expand optionOverflow or broken layoutline-clamp-2 with expandOverflow or cut offMedium
8685ContentDate FormattingAllUse locale-appropriate date formatsUse relative or locale-aware datesAmbiguous date formats2 hours ago or locale format01/02/03Low
8786ContentNumber FormattingAllFormat large numbers for readabilityUse thousand separators or abbreviationsLong unformatted numbers1.2K or 1,2341234567Low
8887ContentPlaceholder ContentAllShow realistic placeholders during devUse realistic sample dataLorem ipsum everywhereReal sample contentLorem ipsumLow
8988OnboardingUser FreedomAllUsers should be able to skip tutorialsProvide Skip and Back buttonsForce linear unskippable tourSkip Tutorial buttonLocked overlay until finishedMedium
9089SearchAutocompleteWebHelp users find results fasterShow predictions as user typesRequire full type and enterDebounced fetch + dropdownNo suggestionsMedium
9190SearchNo ResultsWebDead ends frustrate usersShow 'No results' with suggestionsBlank screen or '0 results'Try searching for X insteadNo results found.Medium
9291Data EntryBulk ActionsWebEditing one by one is tediousAllow multi-select and bulk editSingle row actions onlyCheckbox column + Action barRepeated actions per rowLow
9392AI InteractionDisclaimerAllUsers need to know they talk to AIClearly label AI generated contentPresent AI as humanAI Assistant labelFake human name without labelHigh
9493AI InteractionStreamingAllWaiting for full text is slowStream text response token by tokenShow loading spinner for 10s+Typewriter effectSpinner until 100% completeMedium
9594Spatial UIGaze HoverVisionOSElements should respond to eye tracking before pinchScale/highlight element on lookStatic element until pinchhoverEffect()onTap onlyHigh
9695Spatial UIDepth LayeringVisionOSUI needs Z-depth to separate content from environmentUse glass material and z-offsetFlat opaque panels blocking view.glassBackgroundEffect()bg-whiteMedium
9796SustainabilityAuto-Play VideoWebAutoplaying media consumes data and creates motion barriersPrefer click-to-play; provide pause and captions; stop off-screen and honor reduced motionAuto-play high-resolution loops without pause or captions<video controls preload="none"><track kind="captions" /></video>autoplay loopMedium
9897SustainabilityAsset WeightWebHeavy 3D/Image assets increase carbon footprintCompress and lazy load 3D modelsLoad 50MB texturesDraco compressionRaw .obj filesMedium
9998AI InteractionFeedback LoopAllAI needs user feedback to improveThumps up/down or 'Regenerate'Static output onlyFeedback componentRead-only textLow
10099AccessibilityMotion SensitivityAllParallax/Scroll-jacking causes nauseaHonor prefers-reduced-motion and present the final readable state without parallax or scroll-jackingForce scroll effects@media (prefers-reduced-motion)ScrollTrigger.create()High
101100AccessibilityFocus Not Obscured (Minimum)WebWCAG 2.2 AA requires keyboard focus to remain at least partially visibleOffset sticky UI with scroll-padding and dismiss or move persistent overlaysLet headers footers banners or chat widgets fully cover focusscroll-padding-top: var(--header-height)fixed overlay covers :focusHigh
102101AccessibilityFocus Not Obscured (Enhanced)WebWCAG 2.2 AAA requires keyboard focus to remain fully visibleKeep the entire focused component unobscured by author-created contentPresent this enhanced AAA criterion as an AA requirement or allow persistent UI to hide any part of focusclose persistent overlay before focus moves behind itsticky footer covers half the focused buttonMedium
103102AccessibilityFocus AppearanceWebWCAG 2.2 AAA defines minimum area and contrast for focus indicatorsUse an indicator at least as large as a 2 CSS px perimeter with 3:1 state contrastPresent this enhanced AAA criterion as an AA requirement or use a thin low-contrast outlineoutline: 2px solid currentColor; outline-offset: 2pxbox-shadow: 0 0 1px low-contrastMedium
104103AccessibilityDragging MovementsAllWCAG 2.2 AA requires a single-pointer alternative for author-controlled drag operationsAdd buttons menus or tap-to-move controls and retain keyboard operationMake dragging the only way to reorder resize or selectMove up and Move down buttons beside drag handledrag handle onlyHigh
105104AccessibilityTarget Size (Minimum)WebWCAG 2.2 AA requires 24 CSS px pointer targets or an applicable exceptionUse at least 24 by 24 CSS px or verify spacing equivalent inline user-agent or essential exceptionsAssume native 44pt or 48dp guidance defines web conformancemin-width: 24px; min-height: 24pxtiny adjacent icon buttonsHigh
106105AccessibilityConsistent HelpAllWCAG 2.2 A requires repeated help mechanisms to stay in the same relative orderKeep contact self-help and automated help in consistent locationsMove help controls to different locations on each pageshared header help menupage-specific help placementMedium
107106FormsRedundant EntryAllWCAG 2.2 A avoids requiring the same information twice in one processAuto-populate prior values or let users select previously entered informationAsk users to retype the same address or account data without necessityreuse confirmed shipping addressrepeat full address formMedium
108107Security / AccessibilityAccessible Authentication (Minimum)AllWCAG 2.2 AA says authentication must not depend only on a cognitive function test unless an exception appliesAllow password managers and paste; offer passkeys OAuth or another non-cognitive methodBlock paste or require manual OTP transcription with no alternativeautocomplete="current-password" and paste allowedonpaste preventDefaultCritical
109108AnimationAuto-Rotating Content ControlsAllAuto-rotating content needs user controlProvide previous next and play/pause; stop on focus or hover and when reduced motion is requestedAuto-advance slides without a stop controlbutton aria-label="Pause carousel"timer-only carouselHigh
110109Forms / AccessibilityFocusable Error SummaryWebAn error summary for failed validation complements inline field errors and must be easy to find by keyboard and screen reader usersPlace it at the top of the form; move focus to its heading or container after failed submit; link each item to its invalid field; retain inline errorsReplace inline errors with a visual-only summary or move focus on every blur<div role="alert" tabindex="-1" aria-labelledby="error-title"><h2 id="error-title">There is a problem</h2><a href="#email">Enter an email address</a></div>Toast only with no field links or focus targetHigh
111110TypographyHeading Line BalanceWebShort multi-line headings may use balanced wrapping as a progressive visual heuristicBound the measure and test natural-wrap fallback across widths fonts and localesPromise an exact final line or insert blanket nonbreaking spaces or hardcoded br tags.hero-title { max-inline-size: 20ch; text-wrap: balance; }Heading copy rewritten with forced last-line breaksMedium
112111LayoutLong Token WrappingWebURLs identifiers and user content must not force horizontal overflowUse overflow-wrap anywhere and let flex or grid text children shrinkApply word-break break-all to all prose.token { min-inline-size: 0; overflow-wrap: anywhere; }.token { white-space: nowrap; }High
113112AccessibilityText Reflow and SpacingWebText must remain available at narrow widths zoom and user spacing overridesUse fluid sizes content-driven height and unitless line heightClip text in fixed-width or fixed-height boxes.copy { inline-size: min(100%, 65ch); height: auto; line-height: 1.5; }.copy { width: 900px; height: 40px; overflow: hidden; }Critical
114113ContentEssential Text TruncationAllHeadings actions errors safety text and distinguishing names need complete accessWrap stack resize or provide a visible full-detail pathClamp essential meaning only to make cards uniformAction label wraps or opens full detailsPrimary action shown only as an unexplained ellipsisCritical
115114ContentCompact Label SemanticsAllBadges communicate state while chips or tags represent values or actionsChoose static or interactive markup from the label's meaning and ownershipMake every pill clickable or encode status with color alone<span class='status'>Pending</span><div class='pill' onclick='toggle()'>Pending</div>High
116115LayoutChip Collection ReflowAllFilter chips and editable value collections must preserve labels when space or text size changesWrap the collection or use an operable +n disclosure for hidden overflow valuesForce all chips into one clipped row or hide overflow values<div class='chip-list'>{chips}</div> with flex-wrap<div class='chip-list' style='height:32px;overflow:hidden'>High
117116ContentCompact Label OverflowAllA badge chip or pill label should stay whole on one line when practical and disclose unavoidable truncationBound only unpredictable values; use nowrap with a shrinkable label; expose full text to keyboard pointer and touch usersLet one compact label wrap to a second line or use a hover-only tooltipFlexible label with min-width 0 and an operable full-value disclosureFixed-width badge wraps to second line or clips with title-only recoveryHigh
118117AccessibilityCompact Control SemanticsWebInteractive chips need a native role accessible name state keyboard operation and visible focusPrefer a button and expose pressed or selected state that matches the visible labelUse a clickable div or reveal the only action on hover<button aria-pressed='true'>Open now</button><div class='selected' onclick='toggle()'>Open now</div>Critical
119118AccessibilityContextual Live Badge UpdatesWebAsync badge and count changes should announce a meaningful contextual status without moving focusUse one appropriate atomic status message such as 3 items in cartAnnounce a bare number or make every badge a competing live region<span role='status' aria-atomic='true'>3 items in cart</span><span aria-live='polite'>3</span>High
120119AnimationCancellable State TransitionsWebRapid compact-control changes can interrupt an in-flight transitionCancel or replace prior motion; set the final semantic state directly and handle cancellation cleanupDepend on animationend or transitionend for required state correctnessprevious?.cancel(); setSelected(next)Enable the chip only inside transitionendHigh