[{"data":1,"prerenderedAt":1893},["ShallowReactive",2],{"navigation_docs":3,"-themes-reference-theme-system":127,"-themes-reference-theme-system-surround":1889},[4,19,71,101],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":18},"Démarrer","i-lucide-rocket","\u002Fdemarrer","1.demarrer",[10,14],{"title":11,"path":12,"stem":13},"Rejoindre le studio","\u002Fdemarrer\u002Frejoindre-le-studio","1.demarrer\u002F1.rejoindre-le-studio",{"title":15,"path":16,"stem":17},"Première présentation","\u002Fdemarrer\u002Fpremiere-presentation","1.demarrer\u002F2.premiere-presentation",false,{"title":20,"icon":21,"path":22,"stem":23,"children":24,"page":18},"Écrire","i-lucide-pen-line","\u002Fecrire","2.ecrire",[25,29,33,37,41,45,49,53],{"title":26,"path":27,"stem":28},"La syntaxe","\u002Fecrire\u002Fsyntaxe","2.ecrire\u002F1.syntaxe",{"title":30,"path":31,"stem":32},"Les composants","\u002Fecrire\u002Fcomposants","2.ecrire\u002F2.composants",{"title":34,"path":35,"stem":36},"Story Storybook","\u002Fecrire\u002Fstory-storybook","2.ecrire\u002F3.story-storybook",{"title":38,"path":39,"stem":40},"Image et texte","\u002Fecrire\u002Fimage-a-cote-du-texte","2.ecrire\u002F4.image-a-cote-du-texte",{"title":42,"path":43,"stem":44},"Notes de l'orateur","\u002Fecrire\u002Fnotes-de-presentation","2.ecrire\u002F5.notes-de-presentation",{"title":46,"path":47,"stem":48},"Exporter en PDF","\u002Fecrire\u002Fexport-pdf","2.ecrire\u002F6.export-pdf",{"title":50,"path":51,"stem":52},"Écrire avec un agent","\u002Fecrire\u002Fecrire-avec-un-agent","2.ecrire\u002F7.ecrire-avec-un-agent",{"title":54,"icon":55,"path":56,"stem":57,"children":58,"page":18},"Référence","i-lucide-book-open","\u002Fecrire\u002Freference","ecrire\u002Freference",[59,63,67],{"title":60,"path":61,"stem":62},"nuxt","\u002Fecrire\u002Freference\u002Fnuxt","ecrire\u002Freference\u002Fnuxt\u002FREADME",{"title":64,"path":65,"stem":66},"schemas","\u002Fecrire\u002Freference\u002Fschemas","ecrire\u002Freference\u002Fschemas\u002FREADME",{"title":68,"path":69,"stem":70},"storybook","\u002Fecrire\u002Freference\u002Fstorybook","ecrire\u002Freference\u002Fstorybook\u002FREADME",{"title":72,"icon":73,"path":74,"stem":75,"children":76,"page":18},"Studio","i-lucide-layout-grid","\u002Fstudio","3.studio",[77,81,85,89,93,97],{"title":78,"path":79,"stem":80},"Les rôles","\u002Fstudio\u002Froles","3.studio\u002F1.roles",{"title":82,"path":83,"stem":84},"Visibilité et partage","\u002Fstudio\u002Fvisibilite-et-partage","3.studio\u002F2.visibilite-et-partage",{"title":86,"path":87,"stem":88},"Versions et brouillon","\u002Fstudio\u002Fversions-et-brouillon","3.studio\u002F3.versions-et-brouillon",{"title":90,"path":91,"stem":92},"Jetons d'accès","\u002Fstudio\u002Fjetons-d-acces","3.studio\u002F4.jetons-d-acces",{"title":94,"path":95,"stem":96},"Organiser le catalogue","\u002Fstudio\u002Forganiser-le-catalogue","3.studio\u002F4.organiser-le-catalogue",{"title":98,"path":99,"stem":100},"Problèmes fréquents","\u002Fstudio\u002Fproblemes-frequents","3.studio\u002F5.problemes-frequents",{"title":102,"icon":103,"path":104,"stem":105,"children":106,"page":18},"Thèmes","i-lucide-palette","\u002Fthemes","4.themes",[107,111],{"title":108,"path":109,"stem":110},"Le thème de votre équipe","\u002Fthemes\u002Ftheme-de-votre-equipe","4.themes\u002F1.theme-de-votre-equipe",{"title":54,"icon":55,"path":112,"stem":113,"children":114,"page":18},"\u002Fthemes\u002Freference","themes\u002Freference",[115,119,123],{"title":116,"path":117,"stem":118},"theme-dsfr","\u002Fthemes\u002Freference\u002Ftheme-dsfr","themes\u002Freference\u002Ftheme-dsfr\u002FREADME",{"title":120,"path":121,"stem":122},"theme-kit","\u002Fthemes\u002Freference\u002Ftheme-kit","themes\u002Freference\u002Ftheme-kit\u002FREADME",{"title":124,"path":125,"stem":126},"Theme system","\u002Fthemes\u002Freference\u002Ftheme-system","themes\u002Freference\u002Ftheme-system",{"id":128,"title":124,"body":129,"description":1884,"extension":1885,"meta":1886,"navigation":1348,"path":125,"seo":1887,"stem":126,"__hash__":1888},"docs\u002Fthemes\u002Freference\u002Ftheme-system.md",{"type":130,"value":131,"toc":1870},"minimark",[132,136,169,174,271,275,544,692,741,862,891,895,947,951,969,973,980,1116,1122,1135,1139,1170,1179,1189,1199,1203,1249,1287,1291,1294,1422,1435,1529,1532,1627,1644,1648,1676,1680,1701,1726,1753,1757,1777,1833,1837,1866],[133,134,124],"h1",{"id":135},"theme-system",[137,138,139,140,144,145,148,149,152,153,156,157,160,161,164,165,168],"p",{},"A theme is a directory with a ",[141,142,143],"code",{},"theme.json"," manifest, an SCSS entry and an optional ",[141,146,147],{},"assets\u002F"," folder. The build compiles each theme to ",[141,150,151],{},"public\u002Fthemes\u002F\u003Cname>.css",", copies its assets to ",[141,154,155],{},"public\u002Fthemes\u002F\u003Cname>\u002F",", and generates the runtime registry from the manifests. ",[141,158,159],{},"public\u002Fthemes\u002F"," is a build output; ",[141,162,163],{},"pnpm dev"," and ",[141,166,167],{},"pnpm build"," produce it.",[170,171,173],"h2",{"id":172},"layers","Layers",[175,176,177,205,244],"ol",{},[178,179,180,184,185,188,189,192,193,196,197,200,201,204],"li",{},[181,182,183],"strong",{},"Engine",", package ",[141,186,187],{},"@vignettes\u002Ftheme-kit"," (",[141,190,191],{},"packages\u002Ftheme-kit\u002F","): the CSS every theme needs to work with the Vue components: the semantic token contract, Reveal patches, the MDC ",[141,194,195],{},"display: contents"," bridge, the media-layout grid, the ",[141,198,199],{},"slide-h1\u002Fh2\u002Fh3"," flex skeleton, quicklinks, and the ",[141,202,203],{},"layout"," scale preset. Themes build on this layer and never replace it.",[178,206,207,184,210,188,213,216,217,219,220,223,224,227,228,231,232,235,236,239,240,243],{},[181,208,209],{},"DSFR base",[141,211,212],{},"@vignettes\u002Ftheme-dsfr",[141,214,215],{},"packages\u002Ftheme-dsfr\u002F","): the French state design system as a brand-neutral theme: palette, Marianne typography, ",[141,218,203],{}," scale, light surfaces. Made to be extended, by a brand and by the application's own ",[141,221,222],{},"dsfr"," theme. The Marianne font files come from the ",[141,225,226],{},"@gouvfr\u002Fdsfr"," npm package at build time.",[229,230],"br",{},"The package paints no slide surface, so a brand decides its own. ",[141,233,234],{},"themes\u002Fdsfr\u002F"," adds flat surfaces from the DSFR palette: the title slide on ",[141,237,238],{},"blue-france-975",", section dividers on ",[141,241,242],{},"blue-france-sun-113"," with light text, content slides on white, painted on Reveal's background layer (see \"Slides by heading level\").",[178,245,246,249,250,253,254,256,257,260,261,263,264,256,267,270],{},[181,247,248],{},"Themes and brands",": ",[141,251,252],{},"themes\u002F\u003Cname>\u002F"," in the application (",[141,255,222],{},", ",[141,258,259],{},"minimal",") and ",[141,262,252],{}," in the content space (",[141,265,266],{},"NUXT_CONTENT_DIR",[141,268,269],{},"presentations\u002F"," by default) for a tenant's brands. A brand extends the DSFR base or the engine alone.",[170,272,274],{"id":273},"manifest","Manifest",[276,277,282],"pre",{"className":278,"code":279,"language":280,"meta":281,"style":281},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"name\": \"brand\",\n  \"extends\": \"dsfr\",\n  \"aliases\": [],\n  \"lang\": \"fr\",\n  \"parser\": \"separator\",\n  \"reveal\": { \"slideNumber\": true, \"width\": 1200, \"height\": 800 },\n  \"backgrounds\": {\n    \"h1\": \"assets\u002Fslide-contrast.png\",\n    \"h2\": \"assets\u002Fslide-contrast.png\",\n    \"h3\": \"assets\u002Fslide-subtle.png\"\n  }\n}\n","json","",[141,283,284,293,321,341,356,377,398,457,472,493,512,532,538],{"__ignoreMap":281},[285,286,289],"span",{"class":287,"line":288},"line",1,[285,290,292],{"class":291},"sMK4o","{\n",[285,294,296,299,303,306,309,312,316,318],{"class":287,"line":295},2,[285,297,298],{"class":291},"  \"",[285,300,302],{"class":301},"spNyl","name",[285,304,305],{"class":291},"\"",[285,307,308],{"class":291},":",[285,310,311],{"class":291}," \"",[285,313,315],{"class":314},"sfazB","brand",[285,317,305],{"class":291},[285,319,320],{"class":291},",\n",[285,322,324,326,329,331,333,335,337,339],{"class":287,"line":323},3,[285,325,298],{"class":291},[285,327,328],{"class":301},"extends",[285,330,305],{"class":291},[285,332,308],{"class":291},[285,334,311],{"class":291},[285,336,222],{"class":314},[285,338,305],{"class":291},[285,340,320],{"class":291},[285,342,344,346,349,351,353],{"class":287,"line":343},4,[285,345,298],{"class":291},[285,347,348],{"class":301},"aliases",[285,350,305],{"class":291},[285,352,308],{"class":291},[285,354,355],{"class":291}," [],\n",[285,357,359,361,364,366,368,370,373,375],{"class":287,"line":358},5,[285,360,298],{"class":291},[285,362,363],{"class":301},"lang",[285,365,305],{"class":291},[285,367,308],{"class":291},[285,369,311],{"class":291},[285,371,372],{"class":314},"fr",[285,374,305],{"class":291},[285,376,320],{"class":291},[285,378,380,382,385,387,389,391,394,396],{"class":287,"line":379},6,[285,381,298],{"class":291},[285,383,384],{"class":301},"parser",[285,386,305],{"class":291},[285,388,308],{"class":291},[285,390,311],{"class":291},[285,392,393],{"class":314},"separator",[285,395,305],{"class":291},[285,397,320],{"class":291},[285,399,401,403,406,408,410,413,415,419,421,423,426,428,431,433,435,439,442,444,447,449,451,454],{"class":287,"line":400},7,[285,402,298],{"class":291},[285,404,405],{"class":301},"reveal",[285,407,305],{"class":291},[285,409,308],{"class":291},[285,411,412],{"class":291}," {",[285,414,311],{"class":291},[285,416,418],{"class":417},"sBMFI","slideNumber",[285,420,305],{"class":291},[285,422,308],{"class":291},[285,424,425],{"class":291}," true,",[285,427,311],{"class":291},[285,429,430],{"class":417},"width",[285,432,305],{"class":291},[285,434,308],{"class":291},[285,436,438],{"class":437},"sbssI"," 1200",[285,440,441],{"class":291},",",[285,443,311],{"class":291},[285,445,446],{"class":417},"height",[285,448,305],{"class":291},[285,450,308],{"class":291},[285,452,453],{"class":437}," 800",[285,455,456],{"class":291}," },\n",[285,458,460,462,465,467,469],{"class":287,"line":459},8,[285,461,298],{"class":291},[285,463,464],{"class":301},"backgrounds",[285,466,305],{"class":291},[285,468,308],{"class":291},[285,470,471],{"class":291}," {\n",[285,473,475,478,480,482,484,486,489,491],{"class":287,"line":474},9,[285,476,477],{"class":291},"    \"",[285,479,133],{"class":417},[285,481,305],{"class":291},[285,483,308],{"class":291},[285,485,311],{"class":291},[285,487,488],{"class":314},"assets\u002Fslide-contrast.png",[285,490,305],{"class":291},[285,492,320],{"class":291},[285,494,496,498,500,502,504,506,508,510],{"class":287,"line":495},10,[285,497,477],{"class":291},[285,499,170],{"class":417},[285,501,305],{"class":291},[285,503,308],{"class":291},[285,505,311],{"class":291},[285,507,488],{"class":314},[285,509,305],{"class":291},[285,511,320],{"class":291},[285,513,515,517,520,522,524,526,529],{"class":287,"line":514},11,[285,516,477],{"class":291},[285,518,519],{"class":417},"h3",[285,521,305],{"class":291},[285,523,308],{"class":291},[285,525,311],{"class":291},[285,527,528],{"class":314},"assets\u002Fslide-subtle.png",[285,530,531],{"class":291},"\"\n",[285,533,535],{"class":287,"line":534},12,[285,536,537],{"class":291},"  }\n",[285,539,541],{"class":287,"line":540},13,[285,542,543],{"class":291},"}\n",[545,546,547,560],"table",{},[548,549,550],"thead",{},[551,552,553,557],"tr",{},[554,555,556],"th",{},"Field",[554,558,559],{},"Role",[561,562,563,580,589,598,611,630,644,660,682],"tbody",{},[551,564,565,570],{},[566,567,568],"td",{},[141,569,302],{},[566,571,572,573,576,577],{},"Equals the directory name; used in ",[141,574,575],{},"theme:"," frontmatter and as ",[141,578,579],{},"\u002Fthemes\u002F\u003Cname>.css",[551,581,582,586],{},[566,583,584],{},[141,585,328],{},[566,587,588],{},"Theme this one builds on; checked at build time",[551,590,591,595],{},[566,592,593],{},[141,594,348],{},[566,596,597],{},"Other frontmatter names that resolve to this theme. A tenant uses it to point a name already present in its decks to its brand. An alias that shadows another theme's name is reported at build time",[551,599,600,608],{},[566,601,602,256,604,256,606],{},[141,603,363],{},[141,605,384],{},[141,607,405],{},[566,609,610],{},"Deck defaults the theme carries (language for orthotypography, slide parser, Reveal config)",[551,612,613,617],{},[566,614,615],{},[141,616,464],{},[566,618,619,620,256,622,256,624,256,626,629],{},"Background image per heading level (",[141,621,133],{},[141,623,170],{},[141,625,519],{},[141,627,628],{},"default","), relative to the theme directory or absolute URLs",[551,631,632,637],{},[566,633,634],{},[141,635,636],{},"entry",[566,638,639,640,643],{},"SCSS entry, ",[141,641,642],{},"\u003Cname>.scss"," by default",[551,645,646,651],{},[566,647,648],{},[141,649,650],{},"assets",[566,652,653,654,249,656,659],{},"Extra directories copied under ",[141,655,155],{},[141,657,658],{},"{ \"from\": \"node_modules\u002F...\", \"to\": \"fonts\", \"match\": \"regex\" }",", resolved from the project root",[551,661,662,666],{},[566,663,664],{},[141,665,141],{},[566,667,668,669,188,672,256,675,256,678,681],{},"Code theme of the deck blocks by default: a name of ",[141,670,671],{},"CODE_THEMES",[141,673,674],{},"nuit",[141,676,677],{},"sombre",[141,679,680],{},"clair","), or its properties",[551,683,684,689],{},[566,685,686],{},[141,687,688],{},"preview",[566,690,691],{},"How the catalog draws the card of a deck on this theme, without loading the theme's stylesheet",[137,693,694,696,697,256,700,256,703,706,707,164,710,713,714,717,718,721,722,725,726,729,730,256,732,164,734,736,737,740],{},[141,695,688],{}," takes ",[141,698,699],{},"fontFamily",[141,701,702],{},"titleColor",[141,704,705],{},"titleGradient"," (a gradient applied to the text of the title), ",[141,708,709],{},"textColor",[141,711,712],{},"surface",". Its ",[141,715,716],{},"fonts"," field names an SCSS entry declaring the font faces, compiled on its own to ",[141,719,720],{},"public\u002Fthemes\u002F\u003Cname>\u002Fpreview-fonts.css",", which the catalog loads; ",[141,723,724],{},"pkg:@vignettes\u002Ftheme-dsfr\u002Ffonts"," is the value the DSFR theme uses. ",[141,727,728],{},"levels"," overrides ",[141,731,702],{},[141,733,705],{},[141,735,709],{}," for a first slide of another heading level, and ",[141,738,739],{},"titleGradient: 'none'"," removes the gradient there.",[276,742,744],{"className":278,"code":743,"language":280,"meta":281,"style":281},"{\n  \"preview\": {\n    \"fontFamily\": \"Marianne, Arial, sans-serif\",\n    \"fonts\": \"pkg:@vignettes\u002Ftheme-dsfr\u002Ffonts\",\n    \"titleColor\": \"#000091\",\n    \"textColor\": \"#3a3a3a\",\n    \"surface\": \"#ffffff\"\n  }\n}\n",[141,745,746,750,762,781,799,818,837,854,858],{"__ignoreMap":281},[285,747,748],{"class":287,"line":288},[285,749,292],{"class":291},[285,751,752,754,756,758,760],{"class":287,"line":295},[285,753,298],{"class":291},[285,755,688],{"class":301},[285,757,305],{"class":291},[285,759,308],{"class":291},[285,761,471],{"class":291},[285,763,764,766,768,770,772,774,777,779],{"class":287,"line":323},[285,765,477],{"class":291},[285,767,699],{"class":417},[285,769,305],{"class":291},[285,771,308],{"class":291},[285,773,311],{"class":291},[285,775,776],{"class":314},"Marianne, Arial, sans-serif",[285,778,305],{"class":291},[285,780,320],{"class":291},[285,782,783,785,787,789,791,793,795,797],{"class":287,"line":343},[285,784,477],{"class":291},[285,786,716],{"class":417},[285,788,305],{"class":291},[285,790,308],{"class":291},[285,792,311],{"class":291},[285,794,724],{"class":314},[285,796,305],{"class":291},[285,798,320],{"class":291},[285,800,801,803,805,807,809,811,814,816],{"class":287,"line":358},[285,802,477],{"class":291},[285,804,702],{"class":417},[285,806,305],{"class":291},[285,808,308],{"class":291},[285,810,311],{"class":291},[285,812,813],{"class":314},"#000091",[285,815,305],{"class":291},[285,817,320],{"class":291},[285,819,820,822,824,826,828,830,833,835],{"class":287,"line":379},[285,821,477],{"class":291},[285,823,709],{"class":417},[285,825,305],{"class":291},[285,827,308],{"class":291},[285,829,311],{"class":291},[285,831,832],{"class":314},"#3a3a3a",[285,834,305],{"class":291},[285,836,320],{"class":291},[285,838,839,841,843,845,847,849,852],{"class":287,"line":400},[285,840,477],{"class":291},[285,842,712],{"class":417},[285,844,305],{"class":291},[285,846,308],{"class":291},[285,848,311],{"class":291},[285,850,851],{"class":314},"#ffffff",[285,853,531],{"class":291},[285,855,856],{"class":287,"line":459},[285,857,537],{"class":291},[285,859,860],{"class":287,"line":474},[285,861,543],{"class":291},[137,863,864,867,868,871,872,188,875,256,878,256,881,256,884,887,888,890],{},[141,865,866],{},"packages\u002Fcore\u002Fsrc\u002Ftheme\u002Ftokens.generated.ts"," is generated from the manifests of the application's themes by ",[141,869,870],{},"scripts\u002Fbuild-theme-tokens.ts"," and committed; it seeds the runtime registry in ",[141,873,874],{},"packages\u002Fcore\u002Fsrc\u002Ftheme\u002Ftokens.ts",[141,876,877],{},"knownThemes",[141,879,880],{},"resolveThemeName",[141,882,883],{},"isKnownTheme",[141,885,886],{},"getThemeTokens","). Frontmatter accepts canonical names and aliases; ",[141,889,880],{}," maps a name to the theme whose CSS is loaded.",[170,892,894],{"id":893},"tenant-themes-at-runtime","Tenant themes at runtime",[137,896,897,898,901,902,256,905,908,909,912,913,916,917,920,921,924,925,928,929,932,933,936,937,188,940,943,944,946],{},"Themes of the content space are not part of the image. ",[141,899,900],{},"mise run theme:push -- \u003Cname>[,\u003Cname>] --apply"," compiles them locally and uploads ",[141,903,904],{},"themes\u002F\u003Cname>.css",[141,906,907],{},"themes\u002F\u003Cname>\u002Fassets\u002F",", and ",[141,910,911],{},"themes\u002F\u003Cname>\u002Ftokens.json"," to the bucket, then rebuilds ",[141,914,915],{},"themes\u002Findex.json"," from every published theme. On a deployment, ",[141,918,919],{},"server\u002Futils\u002Fthemes.ts"," reads that index (cached for a minute; ",[141,922,923],{},"POST \u002Fapi\u002Fadmin\u002Fthemes\u002Freload"," forces it), merges it with the themes found on disk in the content space (development), and applies the result with ",[141,926,927],{},"setThemeRegistry",". The ",[141,930,931],{},"theme-registry"," server middleware hands the registry to page requests and the universal plugin ",[141,934,935],{},"src\u002Fplugins\u002Ftheme-registry.ts"," seeds the client with it, so both sides resolve names, aliases and backgrounds identically. ",[141,938,939],{},"\u002Fthemes\u002F**",[141,941,942],{},"server\u002Froutes\u002Fthemes\u002F[...path].ts",") streams the files from the bucket for names that have no static file under ",[141,945,159],{},".",[170,948,950],{"id":949},"renaming-a-theme-in-a-deployed-instance","Renaming a theme in a deployed instance",[137,952,953,954,957,958,961,962,965,966,946],{},"A deck's theme is written in the frontmatter of each of its published versions, of its draft and of its snapshots, and in the ",[141,955,956],{},"theme"," column the catalog reads. ",[141,959,960],{},"mise run theme:rename -- \u003Cfrom> \u003Cto>"," rewrites all of them in one instance, through the app container, listing the decks it would touch before ",[141,963,964],{},"--apply"," writes anything. The rule of what a theme declaration looks like lives in ",[141,967,968],{},"scripts\u002Flib\u002Ftheme-rename.ts",[170,970,972],{"id":971},"the-semantic-token-contract","The semantic token contract",[137,974,975,976,979],{},"Code that must not care which theme is active (the engine layer, MDC components such as ",[141,977,978],{},"Highlight.vue",") references these custom properties only. Each theme sets them.",[545,981,982,992],{},[548,983,984],{},[551,985,986,989],{},[554,987,988],{},"Token",[554,990,991],{},"Purpose",[561,993,994,1004,1014,1024,1034,1044,1056,1066,1076,1086,1096,1106],{},[551,995,996,1001],{},[566,997,998],{},[141,999,1000],{},"--accent",[566,1002,1003],{},"Primary color (links, dividers, accents)",[551,1005,1006,1011],{},[566,1007,1008],{},[141,1009,1010],{},"--accent-soft",[566,1012,1013],{},"Lighter accent (hover tints)",[551,1015,1016,1021],{},[566,1017,1018],{},[141,1019,1020],{},"--accent-bg",[566,1022,1023],{},"Very light tint (callout backgrounds)",[551,1025,1026,1031],{},[566,1027,1028],{},[141,1029,1030],{},"--surface",[566,1032,1033],{},"Page background",[551,1035,1036,1041],{},[566,1037,1038],{},[141,1039,1040],{},"--surface-contrast",[566,1042,1043],{},"Inverse surface (dark blocks, code panels)",[551,1045,1046,1051],{},[566,1047,1048],{},[141,1049,1050],{},"--on-contrast",[566,1052,1053,1054],{},"Text color on ",[141,1055,1040],{},[551,1057,1058,1063],{},[566,1059,1060],{},[141,1061,1062],{},"--text-default",[566,1064,1065],{},"Body text",[551,1067,1068,1073],{},[566,1069,1070],{},[141,1071,1072],{},"--text-title",[566,1074,1075],{},"Headings, strong text",[551,1077,1078,1083],{},[566,1079,1080],{},[141,1081,1082],{},"--text-mention",[566,1084,1085],{},"Muted text (small, captions)",[551,1087,1088,1093],{},[566,1089,1090],{},[141,1091,1092],{},"--border",[566,1094,1095],{},"Outline of a box drawn by a component",[551,1097,1098,1103],{},[566,1099,1100],{},[141,1101,1102],{},"--radius",[566,1104,1105],{},"Corners of that box",[551,1107,1108,1113],{},[566,1109,1110],{},[141,1111,1112],{},"--shadow",[566,1114,1115],{},"Elevation of that box",[137,1117,1118,1121],{},[141,1119,1120],{},"packages\u002Ftheme-kit\u002F_semantic-tokens.scss"," provides defaults so a theme still renders if it forgets one.",[137,1123,1124,1125,256,1128,164,1131,1134],{},"The kit derives three more tokens from the text intensities, at the root of the page: ",[141,1126,1127],{},"--on-surface-title",[141,1129,1130],{},"--on-surface-default",[141,1132,1133],{},"--on-surface-mention",". A component that paints its own surface, such as a diagram card or a story frame, sets the text of that surface from them. A slide that changes its text colors, such as a dark section divider, leaves that surface with its dark text.",[170,1136,1138],{"id":1137},"the-code-theme-of-a-deck","The code theme of a deck",[137,1140,1141,1142,1145,1146,1149,1150,1153,1154,1157,1158,1161,1162,1165,1166,1169],{},"A deck sets the colors of its code blocks in its frontmatter (",[141,1143,1144],{},"code: sombre",", or ",[141,1147,1148],{},"code: { theme: sombre, string: '#FFD700' }","). ",[141,1151,1152],{},"RevealPresentation"," turns that value into ",[141,1155,1156],{},"--code-*"," custom properties on the deck root and adds the class ",[141,1159,1160],{},"reveal--code-theme",". ",[141,1163,1164],{},"packages\u002Fnuxt\u002Fsrc\u002Fruntime\u002Fassets\u002Fcode-theme.css",", which ships with the renderer, colors each token from these properties under any theme. A role the code theme omits keeps the color of the highlight theme (",[141,1167,1168],{},"mdc.highlight.theme",").",[137,1171,1172,1173,1149,1176,1178],{},"A deck without a code theme takes the one its theme names in its manifest (",[141,1174,1175],{},"\"code\": \"clair\"",[141,1177,680],{}," is the light palette: one DSFR illustrative tone per kind of value, each with a contrast of 5:1 or more against the block. When the theme names none, the deck carries neither the class nor the properties and its tokens keep the colors of the highlight theme.",[137,1180,1181,1184,1185,1188],{},[141,1182,1183],{},"reveal--code-block"," is added only when the frontmatter of the deck names a ",[141,1186,1187],{},"background",": the renderer then paints the block. The code theme of a theme never adds it, because the theme draws its own block.",[137,1190,1191,1192,1195,1196,946],{},"A theme reads ",[141,1193,1194],{},"--code-size"," as a minimum for its own size: ",[141,1197,1198],{},"font-size: max(var(--code-size, 0px), 0.7em)",[170,1200,1202],{"id":1201},"compilation","Compilation",[276,1204,1208],{"className":1205,"code":1206,"language":1207,"meta":281,"style":281},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm build:themes                       # tokens, then every theme\npnpm build:theme brand                  # one theme\nnode scripts\u002Fbuild-themes.ts --watch    # recompile on change\n","bash",[141,1209,1210,1222,1235],{"__ignoreMap":281},[285,1211,1212,1215,1218],{"class":287,"line":288},[285,1213,1214],{"class":417},"pnpm",[285,1216,1217],{"class":314}," build:themes",[285,1219,1221],{"class":1220},"sHwdD","                       # tokens, then every theme\n",[285,1223,1224,1226,1229,1232],{"class":287,"line":295},[285,1225,1214],{"class":417},[285,1227,1228],{"class":314}," build:theme",[285,1230,1231],{"class":314}," brand",[285,1233,1234],{"class":1220},"                  # one theme\n",[285,1236,1237,1240,1243,1246],{"class":287,"line":323},[285,1238,1239],{"class":417},"node",[285,1241,1242],{"class":314}," scripts\u002Fbuild-themes.ts",[285,1244,1245],{"class":314}," --watch",[285,1247,1248],{"class":1220},"    # recompile on change\n",[137,1250,1251,1254,1255,1258,1259,1262,1263,1266,1267,1270,1271,1274,1275,1278,1279,1282,1283,1286],{},[141,1252,1253],{},"packages\u002Fnuxt\u002Fsrc\u002Fbuild\u002Ftheme-registry.ts"," discovers the themes; ",[141,1256,1257],{},"packages\u002Fnuxt\u002Fsrc\u002Fbuild\u002Ftheme-build.ts"," compiles one theme with sass and its ",[141,1260,1261],{},"NodePackageImporter",", so ",[141,1264,1265],{},"@use 'pkg:@vignettes\u002Ftheme-kit'"," resolves from the application's ",[141,1268,1269],{},"node_modules"," wherever the theme directory is. ",[141,1272,1273],{},"packages\u002Fnuxt\u002Fsrc\u002Fbuild\u002Ftheme-watcher.js"," watches theme directories and ",[141,1276,1277],{},"packages\u002F"," during ",[141,1280,1281],{},"nuxt dev"," and reloads the page after a recompile. ",[141,1284,1285],{},"server\u002Fplugins\u002Ftheme-consistency.ts"," warns at boot when a theme directory, its compiled CSS and the generated tokens disagree.",[170,1288,1290],{"id":1289},"writing-a-theme","Writing a theme",[137,1292,1293],{},"A brand on the DSFR base:",[276,1295,1299],{"className":1296,"code":1297,"language":1298,"meta":281,"style":281},"language-scss shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F presentations\u002Fthemes\u002Fmybrand\u002Fmybrand.scss\n@use 'pkg:@vignettes\u002Ftheme-dsfr\u002Fvariables' as *;\n@use 'pkg:@vignettes\u002Ftheme-dsfr';\n\n.reveal h1 { color: #0000cc; }\n.reveal section.slide-h2 h2 { color: var(--dsfr-grey-950) !important; }\n","scss",[141,1300,1301,1306,1331,1344,1350,1379],{"__ignoreMap":281},[285,1302,1303],{"class":287,"line":288},[285,1304,1305],{"class":1220},"\u002F\u002F presentations\u002Fthemes\u002Fmybrand\u002Fmybrand.scss\n",[285,1307,1308,1312,1315,1318,1321,1324,1328],{"class":287,"line":295},[285,1309,1311],{"class":1310},"s7zQu","@use",[285,1313,1314],{"class":291}," '",[285,1316,1317],{"class":314},"pkg:@vignettes\u002Ftheme-dsfr\u002Fvariables",[285,1319,1320],{"class":291},"'",[285,1322,1323],{"class":1310}," as",[285,1325,1327],{"class":1326},"sTEyZ"," *",[285,1329,1330],{"class":291},";\n",[285,1332,1333,1335,1337,1340,1342],{"class":287,"line":323},[285,1334,1311],{"class":1310},[285,1336,1314],{"class":291},[285,1338,1339],{"class":314},"pkg:@vignettes\u002Ftheme-dsfr",[285,1341,1320],{"class":291},[285,1343,1330],{"class":291},[285,1345,1346],{"class":287,"line":343},[285,1347,1349],{"emptyLinePlaceholder":1348},true,"\n",[285,1351,1352,1354,1356,1359,1361,1365,1367,1370,1373,1376],{"class":287,"line":358},[285,1353,946],{"class":291},[285,1355,405],{"class":417},[285,1357,1358],{"class":417}," h1",[285,1360,412],{"class":291},[285,1362,1364],{"class":1363},"sqsOY"," color",[285,1366,308],{"class":291},[285,1368,1369],{"class":291}," #",[285,1371,1372],{"class":1326},"0000cc",[285,1374,1375],{"class":291},";",[285,1377,1378],{"class":291}," }\n",[285,1380,1381,1383,1385,1388,1390,1393,1396,1398,1400,1402,1406,1409,1412,1415,1418,1420],{"class":287,"line":379},[285,1382,946],{"class":291},[285,1384,405],{"class":417},[285,1386,1387],{"class":417}," section",[285,1389,946],{"class":291},[285,1391,1392],{"class":417},"slide-h2",[285,1394,1395],{"class":417}," h2",[285,1397,412],{"class":291},[285,1399,1364],{"class":1363},[285,1401,308],{"class":291},[285,1403,1405],{"class":1404},"s2Zo4"," var",[285,1407,1408],{"class":291},"(",[285,1410,1411],{"class":1326},"--dsfr-grey-950",[285,1413,1414],{"class":291},")",[285,1416,1417],{"class":437}," !important",[285,1419,1375],{"class":291},[285,1421,1378],{"class":291},[137,1423,1424,1425,164,1428,1431,1432,1434],{},"A theme made of the tokens, with the base skin of the kit and the DSFR sizes (",[141,1426,1427],{},"examples\u002Fthemes\u002Fexemple-sombre",[141,1429,1430],{},"exemple-marque"," are complete examples; ",[141,1433,1430],{}," also paints its section slides):",[276,1436,1438],{"className":1296,"code":1437,"language":1298,"meta":281,"style":281},"@use 'pkg:@vignettes\u002Ftheme-kit';\n@use 'pkg:@vignettes\u002Ftheme-kit\u002Fbase';\n@use 'pkg:@vignettes\u002Ftheme-kit\u002Fpresets\u002Flayout';\n\n:root {\n  --accent: #c2410c;\n  --surface: #fffdf9;\n  \u002F\u002F the ten other tokens of the contract\n}\n",[141,1439,1440,1453,1466,1479,1483,1492,1506,1520,1525],{"__ignoreMap":281},[285,1441,1442,1444,1446,1449,1451],{"class":287,"line":288},[285,1443,1311],{"class":1310},[285,1445,1314],{"class":291},[285,1447,1448],{"class":314},"pkg:@vignettes\u002Ftheme-kit",[285,1450,1320],{"class":291},[285,1452,1330],{"class":291},[285,1454,1455,1457,1459,1462,1464],{"class":287,"line":295},[285,1456,1311],{"class":1310},[285,1458,1314],{"class":291},[285,1460,1461],{"class":314},"pkg:@vignettes\u002Ftheme-kit\u002Fbase",[285,1463,1320],{"class":291},[285,1465,1330],{"class":291},[285,1467,1468,1470,1472,1475,1477],{"class":287,"line":323},[285,1469,1311],{"class":1310},[285,1471,1314],{"class":291},[285,1473,1474],{"class":314},"pkg:@vignettes\u002Ftheme-kit\u002Fpresets\u002Flayout",[285,1476,1320],{"class":291},[285,1478,1330],{"class":291},[285,1480,1481],{"class":287,"line":343},[285,1482,1349],{"emptyLinePlaceholder":1348},[285,1484,1485,1487,1490],{"class":287,"line":358},[285,1486,308],{"class":291},[285,1488,1489],{"class":301},"root",[285,1491,471],{"class":291},[285,1493,1494,1497,1499,1501,1504],{"class":287,"line":379},[285,1495,1496],{"class":1326},"  --accent",[285,1498,308],{"class":291},[285,1500,1369],{"class":291},[285,1502,1503],{"class":1326},"c2410c",[285,1505,1330],{"class":291},[285,1507,1508,1511,1513,1515,1518],{"class":287,"line":400},[285,1509,1510],{"class":1326},"  --surface",[285,1512,308],{"class":291},[285,1514,1369],{"class":291},[285,1516,1517],{"class":1326},"fffdf9",[285,1519,1330],{"class":291},[285,1521,1522],{"class":287,"line":459},[285,1523,1524],{"class":1220},"  \u002F\u002F the ten other tokens of the contract\n",[285,1526,1527],{"class":287,"line":474},[285,1528,543],{"class":291},[137,1530,1531],{},"A theme on the engine alone, with its own scale:",[276,1533,1535],{"className":1296,"code":1534,"language":1298,"meta":281,"style":281},"\u002F\u002F themes\u002Fmytheme\u002Fmytheme.scss\n@use 'pkg:@vignettes\u002Ftheme-kit';\n\n:root {\n  --accent: #e63946;\n  --surface: #ffffff;\n  \u002F\u002F the rest of the contract\n}\n\n.reveal h1 { font-size: 3em; }\n",[141,1536,1537,1542,1554,1558,1566,1579,1592,1597,1601,1605],{"__ignoreMap":281},[285,1538,1539],{"class":287,"line":288},[285,1540,1541],{"class":1220},"\u002F\u002F themes\u002Fmytheme\u002Fmytheme.scss\n",[285,1543,1544,1546,1548,1550,1552],{"class":287,"line":295},[285,1545,1311],{"class":1310},[285,1547,1314],{"class":291},[285,1549,1448],{"class":314},[285,1551,1320],{"class":291},[285,1553,1330],{"class":291},[285,1555,1556],{"class":287,"line":323},[285,1557,1349],{"emptyLinePlaceholder":1348},[285,1559,1560,1562,1564],{"class":287,"line":343},[285,1561,308],{"class":291},[285,1563,1489],{"class":301},[285,1565,471],{"class":291},[285,1567,1568,1570,1572,1574,1577],{"class":287,"line":358},[285,1569,1496],{"class":1326},[285,1571,308],{"class":291},[285,1573,1369],{"class":291},[285,1575,1576],{"class":1326},"e63946",[285,1578,1330],{"class":291},[285,1580,1581,1583,1585,1587,1590],{"class":287,"line":379},[285,1582,1510],{"class":1326},[285,1584,308],{"class":291},[285,1586,1369],{"class":291},[285,1588,1589],{"class":1326},"ffffff",[285,1591,1330],{"class":291},[285,1593,1594],{"class":287,"line":400},[285,1595,1596],{"class":1220},"  \u002F\u002F the rest of the contract\n",[285,1598,1599],{"class":287,"line":459},[285,1600,543],{"class":291},[285,1602,1603],{"class":287,"line":474},[285,1604,1349],{"emptyLinePlaceholder":1348},[285,1606,1607,1609,1611,1613,1615,1618,1620,1623,1625],{"class":287,"line":495},[285,1608,946],{"class":291},[285,1610,405],{"class":417},[285,1612,1358],{"class":417},[285,1614,412],{"class":291},[285,1616,1617],{"class":1363}," font-size",[285,1619,308],{"class":291},[285,1621,1622],{"class":437}," 3em",[285,1624,1375],{"class":291},[285,1626,1378],{"class":291},[137,1628,1629,1630,1632,1633,1636,1637,1640,1641,1643],{},"Add ",[141,1631,143],{},", run ",[141,1634,1635],{},"pnpm build:themes",", and use ",[141,1638,1639],{},"theme: mytheme"," in a deck. ",[141,1642,1474],{}," gives a theme the DSFR sizes without its colors.",[170,1645,1647],{"id":1646},"the-fallback-theme","The fallback theme",[137,1649,1650,1651,1653,1654,1657,1658,1660,1661,1664,1665,1668,1669,1671,1672,1675],{},"A deck whose frontmatter declares no ",[141,1652,575],{}," renders in the fallback theme of the instance. The create form preselects that theme and a catalog card previews such a deck with it. ",[141,1655,1656],{},"runtimeConfig.public.defaultTheme"," names it (",[141,1659,222],{}," in this application) and ",[141,1662,1663],{},"NUXT_PUBLIC_DEFAULT_THEME"," overrides it at run time. Without a host setting, ",[141,1666,1667],{},"@vignettes\u002Fnuxt"," falls back to ",[141,1670,259],{},". A name that matches no registered theme is reported at boot under ",[141,1673,1674],{},"[themes]"," and ignored.",[170,1677,1679],{"id":1678},"slides-by-heading-level","Slides by heading level",[137,1681,1682,1683,249,1686,1689,1690,1692,1693,1696,1697,1700],{},"The engine tags each ",[141,1684,1685],{},"\u003Csection>",[141,1687,1688],{},"slide-h1"," (title slide), ",[141,1691,1392],{}," (section divider), ",[141,1694,1695],{},"slide-h3"," (heading plus body). The flex skeleton comes from ",[141,1698,1699],{},"packages\u002Ftheme-kit\u002F_slide-structure.scss","; themes set sizes and colors, and backgrounds come from the manifest.",[137,1702,1703,1704,1707,1708,1711,1712,1715,1716,1718,1719,1722,1723,1725],{},"A section that holds vertical slides is wrapped in Reveal's stack. That wrapper carries ",[141,1705,1706],{},"stack-h1"," \u002F ",[141,1709,1710],{},"stack-h2"," instead of a ",[141,1713,1714],{},"slide-"," class, and the section's own content is the first of its vertical slides, keeping its own ",[141,1717,1714],{}," class. So a rule written as ",[141,1720,1721],{},".reveal section.slide-h2 h3"," styles the divider alone and cannot reach the slides nested under it. Target ",[141,1724,1710],{}," to style the wrapper itself.",[137,1727,1728,1729,1732,1733,1736,1737,1740,1741,1744,1745,1748,1749,1752],{},"A flat color surface goes on Reveal's background layer: Reveal creates one ",[141,1730,1731],{},".slide-background"," per slide under ",[141,1734,1735],{},".reveal .backgrounds",", copies the slide's classes onto it, and fills the screen with it whatever the aspect ratio. A rule such as ",[141,1738,1739],{},".reveal .slide-background.slide-h2 { background-color: … }"," colors the divider edge to edge, and Reveal reads that computed color to mark the slide and the deck ",[141,1742,1743],{},"has-dark-background",", which switches its controls to light on its own. Painting the section itself leaves the viewport color visible around the slide on screens of another ratio. The rule leaves out the parent of the layer: the print view moves the layer into the ",[141,1746,1747],{},".pdf-page"," of its slide, and the scroll view, under 435 pixels wide, into the ",[141,1750,1751],{},".scroll-page-content"," of its slide.",[170,1754,1756],{"id":1755},"checking-a-theme","Checking a theme",[137,1758,1759,1762,1763,164,1766,1769,1770,1773,1774,1776],{},[141,1760,1761],{},"examples\u002Fcontrole-du-theme.md"," is a deck that holds each slide role and each element a theme colors: the title slide, a section, a short and a long content slide, inline code, a list, a table, a quote, a code block, columns, the ",[141,1764,1765],{},"media-right",[141,1767,1768],{},"media-left-wide"," layouts, a Mermaid diagram, a ",[141,1771,1772],{},"Diagram",", and a section with content. Write the name of the theme under check in its ",[141,1775,575],{},", import it in a local studio, and read every slide, the vertical ones included:",[1778,1779,1780,1783,1809,1812,1830],"ul",{},[178,1781,1782],{},"Sizes: 1280 × 720 and 1920 × 1080, then 390 pixels wide. Under 435 pixels, reveal.js switches to its scroll view: the slides follow one another, each scaled to the width of the screen, so the body text measures a few pixels whatever the theme. Each section keeps its surface edge to edge.",[178,1784,1785,1786,256,1788,164,1790,1792,1793,1795,1796,1792,1798,1800,1801,1803,1804,1792,1806,1808],{},"Contrast: 4.5:1 or more between a text and its surface, 3:1 for a text of 24 pixels or more, or of 18.5 pixels or more in bold (RGAA, criterion 3.2). The pairs are ",[141,1787,1072],{},[141,1789,1062],{},[141,1791,1082],{}," on ",[141,1794,1030],{},"; ",[141,1797,1000],{},[141,1799,1030],{}," for the links and on ",[141,1802,1020],{}," for the inline code of the base skin; ",[141,1805,1050],{},[141,1807,1040],{},"; the title, the text and the links of a section on its surface.",[178,1810,1811],{},"Inline code: an inline box with a padding and a background. At the end of a line, the browser can break a segment at a space it holds: the background stops at the end of the line and starts again on the next one without its padding. Read the three long segments of the long content slide at each width.",[178,1813,1814,1815,1817,1818,1820,1821,1823,1824,1826,1827,1829],{},"Diagrams: Mermaid fills its boxes with ",[141,1816,1020],{},", outlines them with ",[141,1819,1000],{}," and writes their labels in ",[141,1822,1127],{},"; its lines take the ",[141,1825,1082],{}," of the slide, its free text the ",[141,1828,1062],{}," of the slide, and it measures its labels with the font of the slide. On the last slide, the lines and the free text turn light on the section surface, and the boxes keep their light fill. The renderer scales a diagram down to the width of its column, and its height follows: a wide font scales a wide diagram down further, and a tall diagram can reach the navigation arrows.",[178,1831,1832],{},"The PDF export prints the section surfaces.",[170,1834,1836],{"id":1835},"troubleshooting","Troubleshooting",[1778,1838,1839,1847,1852,1858],{},[178,1840,1841,1842,1844,1845,946],{},"Stylesheet 404: ",[141,1843,151],{}," is missing; run ",[141,1846,1635],{},[178,1848,1849,1850,946],{},"A deck reports an unknown theme: the name is neither a directory with a manifest nor an alias; check ",[141,1851,866],{},[178,1853,1854,1855,1857],{},"Changes in a package do not show: the watcher recompiles every theme on a ",[141,1856,1277],{}," change; a hard refresh may be needed.",[178,1859,1860,1863,1864,946],{},[141,1861,1862],{},"assets \"node_modules\u002F...\" not found",": install dependencies, the DSFR fonts come from ",[141,1865,226],{},[1867,1868,1869],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sqsOY, html code.shiki .sqsOY{--shiki-light:#8796B0;--shiki-default:#B2CCD6;--shiki-dark:#B2CCD6}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":281,"searchDepth":295,"depth":295,"links":1871},[1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883],{"id":172,"depth":295,"text":173},{"id":273,"depth":295,"text":274},{"id":893,"depth":295,"text":894},{"id":949,"depth":295,"text":950},{"id":971,"depth":295,"text":972},{"id":1137,"depth":295,"text":1138},{"id":1201,"depth":295,"text":1202},{"id":1289,"depth":295,"text":1290},{"id":1646,"depth":295,"text":1647},{"id":1678,"depth":295,"text":1679},{"id":1755,"depth":295,"text":1756},{"id":1835,"depth":295,"text":1836},"A theme is a directory with a theme.json manifest, an SCSS entry and an optional assets\u002F folder. The build compiles each theme to public\u002Fthemes\u002F\u003Cname>.css, copies its assets to public\u002Fthemes\u002F\u003Cname>\u002F, and generates the runtime registry from the manifests. public\u002Fthemes\u002F is a build output; pnpm dev and pnpm build produce it.","md",{},{"title":124,"description":1884},"U4vRL__5MkCa7o5Fm14HD9P4-8d6HriF6vMM3Im8QC0",[1890,1892],{"title":120,"path":121,"stem":122,"description":1891,"children":-1},"The engine CSS layer that every Vignettes theme builds on. It is pure SCSS with no JavaScript and no dependencies.",null,1792605686547]