{"id":"2832e7f7-7093-4f54-b986-c8376f816ee1","shortId":"uCCqUF","kind":"skill","title":"Responsive Layout Reviewer","tagline":"Reviews HTML/CSS or component code for responsive design issues across mobile, tablet, and desktop breakpoints.","description":"# Responsive Layout Reviewer\n\n## What this skill does\n\nThis skill reviews HTML/CSS, Tailwind, or React component code for responsive design issues. It checks for layout problems at mobile (320–480px), tablet (768–1024px), and desktop (1280px+) breakpoints, identifies common mistakes like fixed widths, missing overflow handling, inaccessible touch targets, and viewport-breaking elements, and produces a specific list of issues with exact fixes for each.\n\nUse this during code review, before shipping a new component or page, or when a layout is broken on certain screen sizes and you need a systematic diagnosis.\n\n## How to use\n\n### Claude Code / Cline\n\nCopy this file to `.agents/skills/responsive-layout-reviewer/SKILL.md` in your project root.\n\nThen ask:\n- *\"Use the Responsive Layout Reviewer skill on `src/components/ProductCard.tsx`.\"*\n- *\"Review this CSS for responsive issues using the Responsive Layout Reviewer skill.\"*\n\nProvide the component file or the HTML/CSS to review.\n\n### Cursor\n\nAdd the instructions below to your `.cursorrules` or paste them into the Cursor AI pane before sharing the code to review.\n\n### Codex\n\nPaste the HTML/CSS or component code and ask Codex to follow the instructions below.\n\n## The Prompt / Instructions for the Agent\n\nWhen asked to review for responsive design issues, check every item in this checklist:\n\n### Breakpoints to evaluate\n\nUnless the project uses a custom breakpoint system, evaluate at:\n- **Mobile**: 320px (small phone), 375px (iPhone standard)\n- **Mobile landscape**: 667px\n- **Tablet**: 768px, 1024px\n- **Desktop**: 1280px, 1440px\n- **Wide**: 1920px\n\nNote the breakpoint system used by the project (Tailwind defaults, Bootstrap, custom media queries) and use those values.\n\n### Checklist\n\n**Fixed widths**\n- Any element with a hardcoded pixel width that could overflow on smaller screens (e.g., `width: 600px` without `max-width: 100%`)\n- Flex or grid children with `flex: 0 0 [fixed]` that could overflow\n- Tables without `overflow-x: auto` on a wrapper\n\n**Overflow and clipping**\n- Long text strings (URLs, email addresses, names) that don't have `overflow-wrap: break-word` or `text-overflow: ellipsis`\n- Images without `max-width: 100%` or `width: 100%`\n- Horizontal scroll introduced by an element wider than the viewport\n- `overflow: hidden` on a parent that clips important content on small screens\n\n**Typography**\n- Font sizes below 16px on mobile (causes iOS to auto-zoom on input focus)\n- `line-height` too tight for small screens\n- Heading sizes that remain large on mobile without downscaling\n\n**Touch targets**\n- Clickable elements smaller than 44×44px (Apple HIG) or 48×48dp (Material Design) on mobile\n- Links or buttons too close together without sufficient spacing (< 8px gap)\n- Hover-only interactions with no touch equivalent\n\n**Navigation**\n- Desktop navigation that doesn't adapt (no mobile menu, items overflow, hamburger missing)\n- Dropdown menus that don't work on touch devices\n\n**Spacing and padding**\n- Elements with no padding on small screens, causing content to touch the screen edge\n- Fixed margins that eat into usable space on narrow screens\n\n**Images and media**\n- `<img>` without `width` and `height` attributes (causes layout shift)\n- Background images without `background-size: cover` or equivalent\n- Video embeds with no responsive wrapper (`padding-top: 56.25%; position: relative`)\n\n**Flexbox and grid**\n- `flex-wrap: nowrap` on a row that can't fit all items at small sizes\n- Grid with fixed column counts that should switch to fewer columns on mobile\n- `gap` values that are too large on mobile\n\n**Input fields and forms**\n- Inputs without `width: 100%` or equivalent on mobile\n- `font-size` below 16px on inputs (triggers iOS zoom)\n- Select dropdowns with fixed widths that overflow\n\n### Output format\n\n```markdown\n## Responsive Layout Review — [Component/File]\n\n### Critical Issues (will break layout or block usage on mobile)\n\n#### 1. [Issue title]\n- **Breakpoint affected**: [e.g., 320px–768px]\n- **Location**: [CSS class, line number, or component prop]\n- **Problem**: [What breaks and why]\n- **Fix**: [Exact CSS/Tailwind/code change]\n\n### High-Priority Issues (visible problems, degrades UX significantly)\n\n[Same format]\n\n### Warnings (minor issues or edge cases)\n\n[Same format]\n\n### What's Working Well\n[Brief note on responsive patterns already done correctly]\n```\n\n## Example\n\n**Input to Agent:**\n> \"Use the Responsive Layout Reviewer skill on this component:\n>\n> ```tsx\n> <div style={{ display: 'flex', gap: 24 }}>\n>   <img src={product.image} style={{ width: 300, height: 300 }} />\n>   <div style={{ width: 400 }}>\n>     <h2 style={{ fontSize: 28 }}>{product.name}</h2>\n>     <p style={{ fontSize: 14 }}>{product.description}</p>\n>     <button style={{ padding: '4px 8px', fontSize: 12 }}>Add to cart</button>\n>   </div>\n> </div>\n> ```\"\n\n**Output from Agent:**\n\n> ## Responsive Layout Review — ProductCard\n>\n> ### Critical Issues\n>\n> #### 1. Fixed widths cause overflow on mobile\n> - **Breakpoint affected**: All screens below 724px (300 + 400 + 24 gap = 724px minimum width)\n> - **Location**: `img` width 300px, inner `div` width 400px\n> - **Problem**: The total minimum width (724px) exceeds most phone screens, causing horizontal scroll\n> - **Fix**: Remove fixed widths; use `flex: 1` on the text div and `flex-shrink: 0` on the image, or switch to a column layout below 640px:\n>   ```css\n>   @media (max-width: 640px) {\n>     .card { flex-direction: column; }\n>     .card img { width: 100%; height: auto; }\n>   }\n>   ```\n>\n> ### High-Priority Issues\n>\n> #### 2. Touch target too small\n> - **Breakpoint affected**: Mobile\n> - **Location**: `button` with `padding: 4px 8px`\n> - **Problem**: The button is approximately 30px tall — well below the 44px minimum for comfortable touch interaction\n> - **Fix**: `padding: '12px 20px'` — this produces a taller target and also improves visual balance\n>\n> #### 3. Font size below 16px on mobile\n> - **Location**: `<p>` with `fontSize: 14` and `<button>` with `fontSize: 12`\n> - **Problem**: On iOS, inputs and interactive elements with `font-size < 16px` trigger page zoom on focus. Also, 12px text is hard to read on small screens.\n> - **Fix**: Set body text to minimum 16px; button text to 14–16px\n\n## Notes\n\n- Static code review can catch most structural issues, but testing in actual browser DevTools (or on a real device) is still necessary for confirming scroll and touch behavior.\n- Tailwind projects should use the `sm:`, `md:`, `lg:` prefixes consistently — look for Tailwind utilities with no mobile-first base value.\n- For complex layouts, suggest testing with Chrome DevTools Device Mode at 375px width as a baseline.","tags":["responsive","layout","reviewer","openagentskills","notysoty","agent-skills","claude","claude-code","claude-skills","cline","cursor","llm"],"capabilities":["skill","source-notysoty","skill-responsive-layout-reviewer","topic-agent-skills","topic-claude","topic-claude-code","topic-claude-skills","topic-cline","topic-cursor","topic-llm","topic-llm-skills","topic-skills"],"categories":["openagentskills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/Notysoty/openagentskills/responsive-layout-reviewer","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add Notysoty/openagentskills","source_repo":"https://github.com/Notysoty/openagentskills","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 8 github stars · SKILL.md body (6,689 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:13:24.305Z","embedding":null,"createdAt":"2026-05-18T13:20:46.039Z","updatedAt":"2026-05-18T19:13:24.305Z","lastSeenAt":"2026-05-18T19:13:24.305Z","tsv":"'0':294,295,775 '1':602,719,766 '100':287,339,342,563,801 '1024px':50,240 '12':706,866 '1280px':53,242 '12px':840,885 '14':698,862,904 '1440px':243 '16px':369,572,856,878,900,905 '1920px':245 '2':808 '20px':841 '24':677,734 '28':693 '3':852 '300':683,685,732 '300px':742 '30px':827 '320':46 '320px':229,608 '375px':232,967 '400':689,733 '400px':746 '44':404 '44px':405,832 '48':409 '480px':47 '48dp':410 '4px':703,820 '56.25':513 '600px':282 '640px':786,792 '667px':237 '724px':731,736,752 '768':49 '768px':239,609 '8px':424,704,821 'across':13 'actual':918 'adapt':440 'add':159,707 'address':317 'affect':606,727,814 'agent':200,661,712 'agents/skills/responsive-layout-reviewer/skill.md':122 'ai':172 'alreadi':655 'also':848,884 'appl':406 'approxim':826 'ask':128,188,202 'attribut':491 'auto':305,376,803 'auto-zoom':375 'background':495,499 'background-s':498 'balanc':851 'base':954 'baselin':971 'behavior':934 'block':598 'bodi':896 'bootstrap':256 'break':70,327,595,620 'break-word':326 'breakpoint':18,54,215,224,248,605,726,813 'brief':650 'broken':101 'browser':919 'button':417,700,817,824,901 'card':793,798 'cart':709 'case':643 'catch':911 'caus':372,467,492,722,757 'certain':103 'chang':626 'check':40,209 'checklist':214,264 'children':291 'chrome':962 'class':612 'claud':115 'clickabl':400 'cline':117 'clip':311,359 'close':419 'code':8,34,87,116,177,186,908 'codex':180,189 'column':538,545,783,797 'comfort':835 'common':56 'complex':957 'compon':7,33,93,151,185,616,670 'component/file':591 'confirm':930 'consist':944 'content':361,468 'copi':118 'correct':657 'could':275,298 'count':539 'cover':501 'critic':592,717 'css':139,611,787 'css/tailwind/code':625 'cursor':158,171 'cursorrul':165 'custom':223,257 'default':255 'degrad':633 'design':11,37,207,412 'desktop':17,52,241,435 'devic':456,925,964 'devtool':920,963 'diagnosi':111 'direct':796 'display':674 'div':672,686,744,770 'doesn':438 'done':656 'downscal':397 'dropdown':448,579 'e.g':280,607 'eat':477 'edg':473,642 'element':71,268,348,401,460,873 'ellipsi':333 'email':316 'emb':505 'equival':433,503,565 'evalu':217,226 'everi':210 'exact':80,624 'exampl':658 'exceed':753 'fewer':544 'field':557 'file':120,152 'first':953 'fit':529 'fix':59,81,265,296,474,537,581,623,720,760,762,838,894 'flex':288,293,520,675,765,773,795 'flex-direct':794 'flex-shrink':772 'flex-wrap':519 'flexbox':516 'focus':380,883 'follow':191 'font':366,569,853,876 'font-siz':568,875 'fontsiz':692,697,705,861,865 'form':559 'format':586,637,645 'gap':425,548,676,735 'grid':290,518,535 'h2':690 'hamburg':446 'handl':63 'hard':888 'hardcod':271 'head':389 'height':383,490,684,802 'hidden':354 'hig':407 'high':628,805 'high-prior':627,804 'horizont':343,758 'hover':427 'hover-on':426 'html/css':5,29,155,183 'identifi':55 'imag':334,484,496,778 'img':678,740,799 'import':360 'improv':849 'inaccess':64 'inner':743 'input':379,556,560,574,659,870 'instruct':161,193,197 'interact':429,837,872 'introduc':345 'io':373,576,869 'iphon':233 'issu':12,38,78,142,208,593,603,630,640,718,807,914 'item':211,444,531 'landscap':236 'larg':393,553 'layout':2,20,42,99,132,146,493,589,596,665,714,784,958 'lg':942 'like':58 'line':382,613 'line-height':381 'link':415 'list':76 'locat':610,739,816,859 'long':312 'look':945 'margin':475 'markdown':587 'materi':411 'max':285,337,790 'max-width':284,336,789 'md':941 'media':258,486,788 'menu':443 'menus':449 'minimum':737,750,833,899 'minor':639 'miss':61,447 'mistak':57 'mobil':14,45,228,235,371,395,414,442,547,555,567,601,725,815,858,952 'mobile-first':951 'mode':965 'name':318 'narrow':482 'navig':434,436 'necessari':928 'need':108 'new':92 'note':246,651,906 'nowrap':522 'number':614 'output':585,710 'overflow':62,276,299,303,309,324,332,353,445,584,723 'overflow-wrap':323 'overflow-x':302 'p':695 'pad':459,463,511,702,819,839 'padding-top':510 'page':95,880 'pane':173 'parent':357 'past':167,181 'pattern':654 'phone':231,755 'pixel':272 'posit':514 'prefix':943 'prioriti':629,806 'problem':43,618,632,747,822,867 'produc':73,843 'product.description':699 'product.image':680 'product.name':694 'productcard':716 'project':125,220,253,936 'prompt':196 'prop':617 'provid':149 'queri':259 'react':32 'read':890 'real':924 'relat':515 'remain':392 'remov':761 'respons':1,10,19,36,131,141,145,206,508,588,653,664,713 'review':3,4,21,28,88,133,137,147,157,179,204,590,666,715,909 'root':126 'row':525 'screen':104,279,364,388,466,472,483,729,756,893 'scroll':344,759,931 'select':578 'set':895 'share':175 'shift':494 'ship':90 'shrink':774 'signific':635 'size':105,367,390,500,534,570,854,877 'skill':24,27,134,148,667 'skill-responsive-layout-reviewer' 'sm':940 'small':230,363,387,465,533,812,892 'smaller':278,402 'source-notysoty' 'space':423,457,480 'specif':75 'src':679 'src/components/productcard.tsx':136 'standard':234 'static':907 'still':927 'string':314 'structur':913 'style':673,681,687,691,696,701 'suffici':422 'suggest':959 'switch':542,780 'system':225,249 'systemat':110 'tabl':300 'tablet':15,48,238 'tailwind':30,254,935,947 'tall':828 'taller':845 'target':66,399,810,846 'test':916,960 'text':313,331,769,886,897,902 'text-overflow':330 'tight':385 'titl':604 'togeth':420 'top':512 'topic-agent-skills' 'topic-claude' 'topic-claude-code' 'topic-claude-skills' 'topic-cline' 'topic-cursor' 'topic-llm' 'topic-llm-skills' 'topic-skills' 'total':749 'touch':65,398,432,455,470,809,836,933 'trigger':575,879 'tsx':671 'typographi':365 'unless':218 'url':315 'usabl':479 'usag':599 'use':84,114,129,143,221,250,261,662,764,938 'util':948 'ux':634 'valu':263,549,955 'video':504 'viewport':69,352 'viewport-break':68 'visibl':631 'visual':850 'warn':638 'well':649,829 'wide':244 'wider':349 'width':60,266,273,281,286,338,341,488,562,582,682,688,721,738,741,745,751,763,791,800,968 'without':283,301,335,396,421,487,497,561 'word':328 'work':453,648 'wrap':325,521 'wrapper':308,509 'x':304 'zoom':377,577,881","prices":[{"id":"5c5f5589-83d9-488c-bb29-fad8653ba553","listingId":"2832e7f7-7093-4f54-b986-c8376f816ee1","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"Notysoty","category":"openagentskills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:20:46.039Z"}],"sources":[{"listingId":"2832e7f7-7093-4f54-b986-c8376f816ee1","source":"github","sourceId":"Notysoty/openagentskills/responsive-layout-reviewer","sourceUrl":"https://github.com/Notysoty/openagentskills/tree/main/skills/responsive-layout-reviewer","isPrimary":false,"firstSeenAt":"2026-05-18T13:20:46.039Z","lastSeenAt":"2026-05-18T19:13:24.305Z"}],"details":{"listingId":"2832e7f7-7093-4f54-b986-c8376f816ee1","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Notysoty","slug":"responsive-layout-reviewer","github":{"repo":"Notysoty/openagentskills","stars":8,"topics":["agent-skills","claude","claude-code","claude-skills","cline","cursor","llm","llm-skills","skills"],"license":"mit","html_url":"https://github.com/Notysoty/openagentskills","pushed_at":"2026-03-28T06:50:19Z","description":"A  community-driven library of reusable AI agent skills for Claude Code, Cursor, Codex, Cline, and more.","skill_md_sha":"7d4f9fb2cde5a6d295e2bbd4180b349c97473a95","skill_md_path":"skills/responsive-layout-reviewer/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Notysoty/openagentskills/tree/main/skills/responsive-layout-reviewer"},"layout":"multi","source":"github","category":"openagentskills","frontmatter":{"name":"Responsive Layout Reviewer","description":"Reviews HTML/CSS or component code for responsive design issues across mobile, tablet, and desktop breakpoints."},"skills_sh_url":"https://skills.sh/Notysoty/openagentskills/responsive-layout-reviewer"},"updatedAt":"2026-05-18T19:13:24.305Z"}}