[{"data":1,"prerenderedAt":880},["ShallowReactive",2],{"repo-tree":3,"repo-\u002F.claude\u002Fskills\u002Ffigma-diff-section\u002Fskill":283},[4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,69,72,75,78,81,84,86,88,90,93,96,99,102,105,108,111,114,117,120,123,125,127,129,131,133,135,138,141,143,146,149,152,155,158,161,164,167,169,172,175,178,180,183,186,189,192,195,198,201,203,206,209,212,215,218,221,224,227,230,233,236,239,242,245,248,251,254,257,260,263,266,269,272,275,278,281],{"path":5,"title":6},"\u002Fagents\u002Fbackend-code-style","Backend Conventions",{"path":8,"title":9},"\u002Fagents\u002Fdatabase","Database",{"path":11,"title":12},"\u002Fagents\u002Fportal-code-style","Portal Conventions",{"path":14,"title":15},"\u002Fagents\u002Ftranslation","Translation",{"path":17,"title":18},"\u002Fconventions\u002Fbackend-coding","Backend coding conventions",{"path":20,"title":21},"\u002Fconventions\u002Ffrontend-coding","Frontend coding conventions",{"path":23,"title":24},"\u002Fdevelopment-process","Development process",{"path":26,"title":27},"\u002Flearning-api-preview-hetzner-setup","Learning API Preview on Hetzner + Cloudflare",{"path":29,"title":30},"\u002Flearning-api-preview-vm-plan","Learning API Preview VM Plan",{"path":32,"title":33},"\u002Fmonorepo-structure","Monorepo structure",{"path":35,"title":36},"\u002Foperations","Operations — bugs and support",{"path":38,"title":39},"\u002Fpostmortems\u002F2026-03-16_onboarding-currency-regression","Onboarding Zod transform silently broken — web signups assigned wrong checkout currency",{"path":41,"title":42},"\u002Fpostmortems\u002Freadme","Postmortems",{"path":44,"title":45},"\u002Fpostmortems\u002F_template","TEMPLATE",{"path":47,"title":48},"\u002Fpostmortems\u002Fposthog-comparison","Postmortem practice — comparison with PostHog",{"path":50,"title":51},"\u002Fpreview-environment-plan","Preview Environment Plan",{"path":53,"title":54},"\u002Fprinciples","Engineering principles",{"path":56,"title":57},"\u002Fworking-with-ai","Working with AI",{"path":59,"title":60},"\u002F.claude\u002Fskills\u002Feval-playground\u002Fskill","Eval Playground — Co-development Skill",{"path":62,"title":63},"\u002F.claude\u002Fskills\u002Ffigma-diff-section\u002Fskill","Figma Diff Section Pipeline",{"path":65,"title":66},"\u002Fagents","AGENTS.md",{"path":68,"title":66},"\u002Fclaude",{"path":70,"title":71},"\u002Freadme","Studyflash",{"path":73,"title":74},"\u002Fapps\u002Fcore-api\u002Fagents","Core API (apps\u002Fcore-api)",{"path":76,"title":77},"\u002Fapps\u002Fcore-api\u002Freadme","README",{"path":79,"title":80},"\u002Fapps\u002Femail-previews\u002Fagents","Email Previews (apps\u002Femail-previews)",{"path":82,"title":83},"\u002Fapps\u002Flanding-page\u002Fagents","Landing Page (apps\u002Flanding-page)",{"path":85,"title":83},"\u002Fapps\u002Flanding-page\u002Fclaude",{"path":87,"title":66},"\u002Fapps\u002Flearning-api\u002Fagents",{"path":89,"title":77},"\u002Fapps\u002Flearning-api\u002Freadme",{"path":91,"title":92},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Feval_metrics_design","Surface-Specific Eval Metrics Design",{"path":94,"title":95},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Ftest_set","Quiz Eval Test Set",{"path":97,"title":98},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Ffrontend\u002Freadme","React + TypeScript + Vite",{"path":100,"title":101},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Fknown-issues\u002Fcontent-pillar-shallow-coverage\u002Freadme","Content pillar misses subtopics in dense documents",{"path":103,"title":104},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Fknown-issues\u002Fdocling-empty-section-headers\u002Freadme","Empty section headers dropped by docling chunker",{"path":106,"title":107},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Fknown-issues\u002Fdocling-table-reading-order\u002Freadme","Table\u002Fbox layout causes wrong reading order",{"path":109,"title":110},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Fmetrics\u002Freadme","Quiz eval metrics — canonical rubrics",{"path":112,"title":113},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Freports\u002F2026-04-12-quiz-summary-feedback-current-state","Quiz and Summary Feedback Current State",{"path":115,"title":116},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Freports\u002F2026-04-24-quiz-eval-metrics","Quiz Evaluation Metrics",{"path":118,"title":119},"\u002Fapps\u002Flearning-api\u002Fevals-playground\u002Freports\u002F2026-05-01-quiz-eval-current-state","Quiz Eval Current State",{"path":121,"title":122},"\u002Fapps\u002Flearning-api\u002Fmonitoring\u002Freadme","Monitoring Stack",{"path":124,"title":77},"\u002Fapps\u002Flearning-api\u002Fshared\u002Freadme",{"path":126,"title":77},"\u002Fapps\u002Flearning-api\u002Fworkers\u002Flearning_agents\u002Fflashcard_agent\u002Freadme",{"path":128,"title":77},"\u002Fapps\u002Flearning-api\u002Fworkers\u002Flearning_agents\u002Fingestion_agent\u002Freadme",{"path":130,"title":77},"\u002Fapps\u002Flearning-api\u002Fworkers\u002Flearning_agents\u002Fquiz_agent\u002Freadme",{"path":132,"title":77},"\u002Fapps\u002Flearning-api\u002Fworkers\u002Flearning_agents\u002Fsummary_agent\u002Freadme",{"path":134,"title":77},"\u002Fapps\u002Flearning-api\u002Fworkers\u002Fparser\u002Freadme",{"path":136,"title":137},"\u002Fapps\u002Fmarketing-emails-preview\u002Fagents","Marketing Emails Preview (apps\u002Fmarketing-emails-preview)",{"path":139,"title":140},"\u002Fapps\u002Fmobile-app\u002Fagents","StudyFlash Mobile App - Claude Code Configuration",{"path":142,"title":140},"\u002Fapps\u002Fmobile-app\u002Fclaude",{"path":144,"title":145},"\u002Fapps\u002Fmountain-max\u002Fagents","Mountain Max (apps\u002Fmountain-max)",{"path":147,"title":148},"\u002Fapps\u002Fmountain-max\u002Fgame\u002Freadme","Mountain Max Game",{"path":150,"title":151},"\u002Fapps\u002Fportal\u002Fagents","Portal (apps\u002Fportal)",{"path":153,"title":154},"\u002Fapps\u002Fportal\u002Freadme","Nuxt Minimal Starter",{"path":156,"title":157},"\u002Fapps\u002Fportal\u002Fapp\u002Fcomposables\u002Ffiles\u002Freadme","File Upload Composables",{"path":159,"title":160},"\u002Fapps\u002Fportal\u002Fdocs\u002Flibrary-routing","Library Routing Documentation",{"path":162,"title":163},"\u002Fapps\u002Fsupabase\u002Fagents","Supabase (apps\u002Fsupabase)",{"path":165,"title":166},"\u002Fapps\u002Fwrapped\u002Fagents","Wrapped (apps\u002Fwrapped)",{"path":168,"title":98},"\u002Fapps\u002Fwrapped\u002Freadme",{"path":170,"title":171},"\u002Finfra\u002Freadme","infra\u002F",{"path":173,"title":174},"\u002Finfra\u002Fdns\u002Freadme","DNS Infrastructure",{"path":176,"title":177},"\u002Finfra\u002Fdokploy\u002Freadme","studyflash-dokploy",{"path":179,"title":77},"\u002Finfra\u002Fdokploy\u002Fsdk\u002Fnodejs\u002Freadme",{"path":181,"title":182},"\u002Finfra\u002Finfisical\u002Freadme","Infisical Infrastructure",{"path":184,"title":185},"\u002Finfra\u002Flearning-api\u002Freadme","Pulumi GCP TypeScript Template",{"path":187,"title":188},"\u002Finfra\u002Fopenreplay\u002Freadme","OpenReplay on Hetzner",{"path":190,"title":191},"\u002Finfra\u002Fscripts\u002Freadme","infra\u002Fscripts\u002F",{"path":193,"title":194},"\u002Finfra\u002Fturborepo-cache\u002Freadme","Turborepo Remote Cache Infrastructure",{"path":196,"title":197},"\u002Finternal\u002Fchatwoot\u002Freadme","Chatwoot Infrastructure",{"path":199,"title":200},"\u002Finternal\u002Fchatwoot\u002Fprovider\u002Freadme","studyflash-chatwoot-provider",{"path":202,"title":77},"\u002Finternal\u002Fchatwoot\u002Fprovider\u002Fsdk\u002Fnodejs\u002Freadme",{"path":204,"title":205},"\u002Finternal\u002Fdocs\u002Freadme","internal\u002Fdocs",{"path":207,"title":208},"\u002Finternal\u002Fsupport-bot\u002Fclaude","Support Bot (Maximilian)",{"path":210,"title":211},"\u002Finternal\u002Fsupport-bot\u002Freadme","Studyflash Customer Support Bot (Maximilian)",{"path":213,"title":214},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Faccount_issues","Account Issues",{"path":216,"title":217},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fbilling_invoice","Billing Invoice",{"path":219,"title":220},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fcontent_upload","Content Upload",{"path":222,"title":223},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fdata_loss","Data Loss",{"path":225,"title":226},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fflashcard_issues","Flashcard Issues",{"path":228,"title":229},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fgarbage","Garbage",{"path":231,"title":232},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fgeneral_how_to","General How To",{"path":234,"title":235},"\u002Finternal\u002Fsupport-bot\u002Fkb","Knowledge Base Index",{"path":237,"title":238},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Flanguage_issues","Language Issues",{"path":240,"title":241},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fmindmap_issues","Mindmap Issues",{"path":243,"title":244},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fmisunderstanding","Misunderstanding",{"path":246,"title":247},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fmock_exam_issues","Mock Exam Issues",{"path":249,"title":250},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fpodcast_issues","Podcast Issues",{"path":252,"title":253},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fquiz_issues","Quiz Issues",{"path":255,"title":256},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Frefund_request","Refund Request",{"path":258,"title":259},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fsubscription_cancellation","Subscription Cancellation",{"path":261,"title":262},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fsubscription_info","Subscription Info",{"path":264,"title":265},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fsummary_issues","Summary Issues",{"path":267,"title":268},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Ftechnical_errors","Technical Errors",{"path":270,"title":271},"\u002Finternal\u002Fsupport-bot\u002Fkb\u002Fvideo_issues","Video Issues",{"path":273,"title":274},"\u002Fpackages\u002Fcommon\u002Fdocs\u002Fearly-access-features","Declarative Early Access Features",{"path":276,"title":277},"\u002Fpackages\u002Fcommon\u002Fscripts\u002Freadme","Common Package Scripts",{"path":279,"title":280},"\u002Fpackages\u002Fdevtools\u002Ffigma-plugins\u002Freadme","Figma plugins",{"path":282,"title":77},"\u002Fpackages\u002Fpulumi-infisical\u002Freadme",{"id":284,"title":63,"body":285,"description":871,"extension":872,"lastReviewed":873,"meta":874,"navigation":735,"owner":873,"path":62,"seo":877,"status":873,"stem":878,"tags":873,"__hash__":879},"repo\u002F.claude\u002Fskills\u002Ffigma-diff-section\u002FSKILL.md",{"type":286,"value":287,"toc":861},"minimark",[288,292,305,310,320,324,329,336,405,430,434,459,466,484,488,491,496,499,573,577,588,606,611,634,638,641,658,662,690,694,697,701,715,719,810,814,841,848,852,857],[289,290,63],"h1",{"id":291},"figma-diff-section-pipeline",[293,294,295,296,300,301,304],"p",{},"Run the full pipeline for one section. The argument is a Figma URL (",[297,298,299],"code",{},"https:\u002F\u002Fwww.figma.com\u002Fdesign\u002F...?node-id=XXXX-YYYY",") or a raw node ID (",[297,302,303],{},"XXXX:YYYY",").",[306,307,309],"h2",{"id":308},"prerequisites","Prerequisites",[311,312,313],"ul",{},[314,315,316,319],"li",{},[297,317,318],{},"FIGMA_TOKEN"," env var set",[306,321,323],{"id":322},"steps","Steps",[325,326,328],"h3",{"id":327},"_1-fetch","1. Fetch",[293,330,331,332,335],{},"Fetch the section node via the Figma REST API and save to ",[297,333,334],{},"figma-cache\u002F",":",[337,338,343],"pre",{"className":339,"code":340,"language":341,"meta":342,"style":342},"language-bash shiki shiki-themes github-light github-dark","curl -sH \"X-Figma-Token: $FIGMA_TOKEN\" \\\n  \"https:\u002F\u002Fapi.figma.com\u002Fv1\u002Ffiles\u002F{fileKey}\u002Fnodes?ids={nodeId}&geometry=paths\" \\\n  -o figma-cache\u002F\u003Csection-slug>.json\n","bash","",[297,344,345,372,380],{"__ignoreMap":342},[346,347,350,354,358,362,366,369],"span",{"class":348,"line":349},"line",1,[346,351,353],{"class":352},"sScJk","curl",[346,355,357],{"class":356},"sj4cs"," -sH",[346,359,361],{"class":360},"sZZnC"," \"X-Figma-Token: ",[346,363,365],{"class":364},"sVt8B","$FIGMA_TOKEN",[346,367,368],{"class":360},"\"",[346,370,371],{"class":356}," \\\n",[346,373,375,378],{"class":348,"line":374},2,[346,376,377],{"class":360},"  \"https:\u002F\u002Fapi.figma.com\u002Fv1\u002Ffiles\u002F{fileKey}\u002Fnodes?ids={nodeId}&geometry=paths\"",[346,379,371],{"class":356},[346,381,383,386,389,393,396,399,402],{"class":348,"line":382},3,[346,384,385],{"class":356},"  -o",[346,387,388],{"class":360}," figma-cache\u002F",[346,390,392],{"class":391},"szBVR","\u003C",[346,394,395],{"class":360},"section-slu",[346,397,398],{"class":364},"g",[346,400,401],{"class":391},">",[346,403,404],{"class":360},".json\n",[293,406,407,408,411,412,415,416,418,419,422,423,426,427,304],{},"Extract the ",[297,409,410],{},"fileKey"," and ",[297,413,414],{},"nodeId"," from the Figma URL. Node IDs use ",[297,417,335],{}," in the API (e.g. ",[297,420,421],{},"10018:95883",") but ",[297,424,425],{},"-"," in URLs (e.g. ",[297,428,429],{},"node-id=10018-95883",[325,431,433],{"id":432},"_2-extract","2. Extract",[337,435,437],{"className":339,"code":436,"language":341,"meta":342,"style":342},"python3 .claude\u002Fskills\u002Ffigma-diff-section\u002Fextract-structure.py figma-cache\u002F\u003Csection-slug>.json\n",[297,438,439],{"__ignoreMap":342},[346,440,441,444,447,449,451,453,455,457],{"class":348,"line":349},[346,442,443],{"class":352},"python3",[346,445,446],{"class":360}," .claude\u002Fskills\u002Ffigma-diff-section\u002Fextract-structure.py",[346,448,388],{"class":360},[346,450,392],{"class":391},[346,452,395],{"class":360},[346,454,398],{"class":364},[346,456,401],{"class":391},[346,458,404],{"class":360},[293,460,461,462,465],{},"This writes ",[297,463,464],{},"figma-cache\u002F\u003Csection-slug>-structure.json"," with:",[311,467,468,471,478],{},[314,469,470],{},"Noise stripped (geometry, invisible nodes, vectors)",[314,472,473,474,477],{},"Variable tokens resolved (e.g. ",[297,475,476],{},"new-base\u002Fprimary",")",[314,479,480,481,477],{},"Typography style tokens resolved (e.g. ",[297,482,483],{},"Body\u002FEmphasized",[325,485,487],{"id":486},"_3-diff","3. Diff",[293,489,490],{},"For each screen (or logical screen group) in the structure JSON, compare it against the source code and write a diff report.",[492,493,495],"h4",{"id":494},"how-to-read-the-structure-json","How to read the structure JSON",[293,497,498],{},"Each node has:",[311,500,501,518,534,550,567],{},[314,502,503,506,507,509,510,513,514,517],{},[297,504,505],{},"fills[].token"," — design token name (e.g. ",[297,508,476],{},"). If ",[297,511,512],{},"tokenized: true",", it's bound to a variable; if ",[297,515,516],{},"false",", it's hardcoded.",[314,519,520,523,524,523,527,530,531],{},[297,521,522],{},"fontSize",", ",[297,525,526],{},"fontWeight",[297,528,529],{},"lineHeightPx"," — each is ",[297,532,533],{},"{value, tokenized, token}",[314,535,536,539,540,523,542,545,546,549],{},[297,537,538],{},"textStyle"," — typography style name (e.g. ",[297,541,483],{},[297,543,544],{},"Callout\u002FRegular",") when a text style is applied. This means the font is tokenized via a style, even if ",[297,547,548],{},"fontSize.tokenized"," is false.",[314,551,552,523,555,523,558,523,561,564,565],{},[297,553,554],{},"cornerRadius",[297,556,557],{},"paddingTop\u002FRight\u002FBottom\u002FLeft",[297,559,560],{},"itemSpacing",[297,562,563],{},"layoutMode"," — layout props, each ",[297,566,533],{},[314,568,569,572],{},[297,570,571],{},"strokes[].token"," — border color token",[492,574,576],{"id":575},"component-instances-and-overrides","Component instances and overrides",[293,578,579,580,583,584],{},"When a node has ",[297,581,582],{},"type: \"INSTANCE\"",", it is a placed instance of a Figma component. ",[585,586,587],"strong",{},"Overrides are the most important signal on instance nodes.",[311,589,590,596],{},[314,591,592,595],{},[297,593,594],{},"componentId"," — the base component being used",[314,597,598,601,602,605],{},[297,599,600],{},"overrides"," — array of ",[297,603,604],{},"{id, overriddenFields}"," listing which child nodes have been customized away from the component default",[293,607,608],{},[585,609,610],{},"How to use this:",[311,612,613,619,624],{},[314,614,615,616,618],{},"If ",[297,617,600],{}," is absent or empty → the instance uses the component's default values exactly. Do not infer custom styling from child node values alone.",[314,620,615,621,623],{},[297,622,600],{}," is present → only the listed fields on the listed child IDs are intentionally customized. Everything else is the component default.",[314,625,626,627,629,630,633],{},"Multiple instances of the same ",[297,628,594],{}," with different overrides = different ",[585,631,632],{},"states"," of the same component.",[492,635,637],{"id":636},"what-to-compare","What to compare",[293,639,640],{},"For each screen: read the Figma JSON, then read the source files, then diff:",[311,642,643,646,649,652,655],{},[314,644,645],{},"Typography: fontSize, fontWeight, lineHeight, textStyle, textAlignHorizontal (omitted in JSON when LEFT — treat absence as LEFT)",[314,647,648],{},"Colors: fills and strokes — use token name if tokenized, hex if not",[314,650,651],{},"Spacing: padding, gap (itemSpacing), margin",[314,653,654],{},"Border: cornerRadius, strokeWidth, strokeStyle",[314,656,657],{},"Layout: layoutMode, alignment, sizing",[492,659,661],{"id":660},"diff-output-rules","Diff output rules",[311,663,664,671,678,684],{},[314,665,666,667,670],{},"Only report ",[585,668,669],{},"actual differences"," — skip things that match.",[314,672,673,674,677],{},"Format each finding as: ",[297,675,676],{},"- **[ComponentName:lineNumber]** Description — \\","current value` → `figma value` (token: `token-name` if tokenized)`",[314,679,680,681],{},"Items needing designer\u002Fproduct confirmation: add ",[297,682,683],{},"⚠️ confirm",[314,685,686,687],{},"Write diff reports to ",[297,688,689],{},"docs\u002Ffigma-diffs\u002F",[325,691,693],{"id":692},"_4-synthesize","4. Synthesize",[293,695,696],{},"Read all diff reports for this section and produce a single deduplicated implementation plan.",[492,698,700],{"id":699},"deduplication-rules","Deduplication rules",[311,702,703,706,709],{},[314,704,705],{},"If the same finding appears across multiple screens (e.g. fontSize change in every screen), list it ONCE under a \"Shared\" section",[314,707,708],{},"Designer annotations override or supplement diff findings — mark them as must-do",[314,710,711,712,714],{},"Items flagged ",[297,713,683],{}," in diffs go into \"Flagged for review\"",[492,716,718],{"id":717},"plan-output-format","Plan output format",[337,720,724],{"className":721,"code":722,"language":723,"meta":342,"style":342},"language-markdown shiki shiki-themes github-light github-dark","# [Section] — Implementation Plan\n\n## Designer annotations (must-do)\n- [ ] **[File:line]**: Description — *\"exact annotation text\"*\n\n## Diff findings (confirmed)\n\n### Shared layout & structure\n### Shared typography\n### [other logical groupings]\n\n## Flagged for review\n- [ ] **Item**: what needs a decision before implementing\n\n## Out of scope \u002F ignore\n","markdown",[297,725,726,731,737,742,748,753,759,764,770,776,782,787,793,799,804],{"__ignoreMap":342},[346,727,728],{"class":348,"line":349},[346,729,730],{},"# [Section] — Implementation Plan\n",[346,732,733],{"class":348,"line":374},[346,734,736],{"emptyLinePlaceholder":735},true,"\n",[346,738,739],{"class":348,"line":382},[346,740,741],{},"## Designer annotations (must-do)\n",[346,743,745],{"class":348,"line":744},4,[346,746,747],{},"- [ ] **[File:line]**: Description — *\"exact annotation text\"*\n",[346,749,751],{"class":348,"line":750},5,[346,752,736],{"emptyLinePlaceholder":735},[346,754,756],{"class":348,"line":755},6,[346,757,758],{},"## Diff findings (confirmed)\n",[346,760,762],{"class":348,"line":761},7,[346,763,736],{"emptyLinePlaceholder":735},[346,765,767],{"class":348,"line":766},8,[346,768,769],{},"### Shared layout & structure\n",[346,771,773],{"class":348,"line":772},9,[346,774,775],{},"### Shared typography\n",[346,777,779],{"class":348,"line":778},10,[346,780,781],{},"### [other logical groupings]\n",[346,783,785],{"class":348,"line":784},11,[346,786,736],{"emptyLinePlaceholder":735},[346,788,790],{"class":348,"line":789},12,[346,791,792],{},"## Flagged for review\n",[346,794,796],{"class":348,"line":795},13,[346,797,798],{},"- [ ] **Item**: what needs a decision before implementing\n",[346,800,802],{"class":348,"line":801},14,[346,803,736],{"emptyLinePlaceholder":735},[346,805,807],{"class":348,"line":806},15,[346,808,809],{},"## Out of scope \u002F ignore\n",[492,811,813],{"id":812},"synthesis-rules","Synthesis rules",[311,815,816,832,835,838],{},[314,817,818,819,824,825,828,829],{},"Every finding must reference ",[585,820,821],{},[346,822,823],{},"ComponentName:lineNumber"," with ",[297,826,827],{},"current"," → ",[297,830,831],{},"figma value",[314,833,834],{},"Use token names where diffs show tokenized values",[314,836,837],{},"Do NOT invent findings not present in the diff reports or annotations",[314,839,840],{},"Do NOT include findings about keyboard rendering, dark mode, or anything the diffs mark as out of scope",[293,842,843,844,847],{},"Write the plan to ",[297,845,846],{},"docs\u002Ffigma-diffs\u002F\u003Csection-slug>-plan.md",".",[306,849,851],{"id":850},"notes","Notes",[311,853,854],{},[314,855,856],{},"Re-running is safe — all outputs are overwritten",[858,859,860],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":342,"searchDepth":374,"depth":374,"links":862},[863,864,870],{"id":308,"depth":374,"text":309},{"id":322,"depth":374,"text":323,"children":865},[866,867,868,869],{"id":327,"depth":382,"text":328},{"id":432,"depth":382,"text":433},{"id":486,"depth":382,"text":487},{"id":692,"depth":382,"text":693},{"id":850,"depth":374,"text":851},"Run the full Figma → diff → plan pipeline for one section. Fetches fresh data, extracts structure, diffs against code, and synthesizes an implementation plan.","md",null,{"name":875,"allowed-tools":876},"figma-diff-section","Bash, Agent, Read, Write, Glob, Grep",{"title":63,"description":871},".claude\u002Fskills\u002Ffigma-diff-section\u002FSKILL","z3YJJEHmC8OorsTMIRbVpEcO2F3dEK4zvxuYmtwri6U",1779007962947]