[{"data":1,"prerenderedAt":1167},["ShallowReactive",2],{"docs-page-\u002Fdocs\u002Fdesign-system":3,"docs-surround-\u002Fdocs\u002Fdesign-system":1139,"docs-navigation":1152},{"id":4,"title":5,"body":6,"description":1130,"extension":1131,"meta":1132,"navigation":1133,"path":1135,"seo":1136,"stem":1137,"__hash__":1138},"docs\u002Fdocs\u002F3.design-system.md","Design system",{"type":7,"value":8,"toc":1114},"minimark",[9,18,47,52,122,126,131,232,238,306,329,356,360,365,518,532,536,540,543,646,650,689,693,699,843,909,913,1064,1068,1110],[10,11,12,13,17],"p",{},"El look del template es ",[14,15,16],"strong",{},"Claude Amber",": lienzo crema, acento terracota, radios generosos y títulos con serif. La regla que lo sostiene todo es una sola:",[19,20,21],"blockquote",{},[10,22,23,26,27,31,32,35,36,39,40,39,43,46],{},[14,24,25],{},"Nada hardcodea un color."," Cada valor visual vive en un token de ",[28,29,30],"code",{},"app\u002Fassets\u002Fcss\u002Fmain.css"," y se consume con una clase ",[28,33,34],{},".ds-*"," o una utilidad semántica (",[28,37,38],{},"bg-default",", ",[28,41,42],{},"border-default",[28,44,45],{},"text-muted","). Como claro y oscuro tienen su propio bloque de tokens, un cambio se hace una vez y se ve bien en los dos modos.",[48,49,51],"h2",{"id":50},"dónde-vive-cada-cosa","Dónde vive cada cosa",[53,54,55,71],"table",{},[56,57,58],"thead",{},[59,60,61,65,68],"tr",{},[62,63,64],"th",{},"Pieza",[62,66,67],{},"Archivo",[62,69,70],{},"Rol",[72,73,74,89,109],"tbody",{},[59,75,76,82,86],{},[77,78,79,80],"td",{},"Tokens y clases ",[28,81,34],{},[77,83,84],{},[28,85,30],{},[77,87,88],{},"La única fuente de colores, radios, sombras y tipografías",[59,90,91,94,99],{},[77,92,93],{},"Temas globales de componentes",[77,95,96],{},[28,97,98],{},"app\u002Fapp.config.ts",[77,100,101,102,39,105,108],{},"Router de slots de Nuxt UI (",[28,103,104],{},"ui.card",[28,106,107],{},"ui.modal",", …)",[59,110,111,114,119],{},[77,112,113],{},"Guía completa (repo)",[77,115,116],{},[28,117,118],{},"DESIGN_SYSTEM.md",[77,120,121],{},"Recetas, verificación y troubleshooting paso a paso",[48,123,125],{"id":124},"los-tres-niveles","Los tres niveles",[127,128,130],"h3",{"id":129},"_1-tokens","1. Tokens",[132,133,134,161,179,203],"ul",{},[135,136,137,140,141,144,145,148,149,152,153,156,157,160],"li",{},[14,138,139],{},"Tipografía",": ",[28,142,143],{},"--font-sans"," (Outfit) para todo el texto de interfaz, ",[28,146,147],{},"--font-heading"," (Fraunces) solo para títulos reales (",[28,150,151],{},"h1…h6",", títulos de page card, modal y navbar), ",[28,154,155],{},"--font-mono"," (Geist Mono) para código e identificadores. Si un título se reutiliza como etiqueta pequeña, añade ",[28,158,159],{},"font-sans"," a esa instancia.",[135,162,163,166,167,170,171,174,175,178],{},[14,164,165],{},"Acento",": la escala ",[28,168,169],{},"--color-claude-50…950"," (el 500 es el terracota de marca) más ",[28,172,173],{},"ui.colors.primary = 'claude'"," en ",[28,176,177],{},"app.config.ts",". No hay un segundo color de marca.",[135,180,181,140,184,39,187,190,191,194,195,198,199,202],{},[14,182,183],{},"Superficies",[28,185,186],{},"--ds-card",[28,188,189],{},"--ds-panel"," y ",[28,192,193],{},"--ds-field",", con valor claro en ",[28,196,197],{},":root"," y oscuro en ",[28,200,201],{},".dark",".",[135,204,205,140,208,39,211,39,214,217,218,221,222,221,225,221,228,231],{},[14,206,207],{},"Semánticos",[28,209,210],{},"--ui-bg",[28,212,213],{},"--ui-border",[28,215,216],{},"--ui-text*"," se sobrescriben en ambos modos. ",[28,219,220],{},"success"," \u002F ",[28,223,224],{},"info",[28,226,227],{},"warning",[28,229,230],{},"error"," se quedan como vienen: son señales de estado y deben seguir siendo reconocibles.",[127,233,235,236],{"id":234},"_2-clases-ds","2. Clases ",[28,237,34],{},[53,239,240,253],{},[56,241,242],{},[59,243,244,247,250],{},[62,245,246],{},"Clase",[62,248,249],{},"Efecto",[62,251,252],{},"Cuándo usarla",[72,254,255,268,281],{},[59,256,257,262,265],{},[77,258,259],{},[28,260,261],{},"ds-card",[77,263,264],{},"Fondo de tarjeta + borde de 1px + sombra suave",[77,266,267],{},"Tarjetas y page cards",[59,269,270,275,278],{},[77,271,272],{},[28,273,274],{},"ds-panel",[77,276,277],{},"Fondo elevado + borde de 1px",[77,279,280],{},"Modales, popovers, dropdowns, selects, toasts, tooltips",[59,282,283,288,291],{},[77,284,285],{},[28,286,287],{},"ds-field",[77,289,290],{},"Fondo de campo",[77,292,293,39,296,299,300,221,303],{},[28,294,295],{},"UInput",[28,297,298],{},"UTextarea"," y triggers de ",[28,301,302],{},"USelect",[28,304,305],{},"USelectMenu",[10,307,308,309,315,316,39,318,39,321,324,325,328],{},"Están declaradas ",[14,310,311,312],{},"fuera de cualquier ",[28,313,314],{},"@layer",", y por eso ganan a las utilidades de Tailwind (",[28,317,38],{},[28,319,320],{},"bg-elevated",[28,322,323],{},"shadow-lg",") sin ",[28,326,327],{},"!important",". Dos consecuencias:",[132,330,331,341],{},[135,332,333,334,336,337,340],{},"No las muevas a ",[28,335,314],{}," ni las conviertas a ",[28,338,339],{},"@utility",": perderían esa prioridad.",[135,342,343,344,347,348,351,352,355],{},"Al ser CSS plano ",[14,345,346],{},"no aceptan variantes"," (",[28,349,350],{},"md:ds-panel"," no existe). Si necesitas una variante, escribe una regla ",[28,353,354],{},"@media"," explícita.",[127,357,359],{"id":358},"_3-temas-de-componentes","3. Temas de componentes",[10,361,362,364],{},[28,363,98],{}," solo enruta slots hacia tokens y clases; nunca declara colores literales:",[366,367,372],"pre",{"className":368,"code":369,"language":370,"meta":371,"style":371},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineAppConfig({\n  ui: {\n    colors: { primary: 'claude', neutral: 'stone' },\n    card: { slots: { root: 'ds-card', title: 'font-heading' } }\n  }\n})\n","ts","",[28,373,374,398,411,455,503,509],{"__ignoreMap":371},[375,376,379,383,386,390,394],"span",{"class":377,"line":378},"line",1,[375,380,382],{"class":381},"s7zQu","export",[375,384,385],{"class":381}," default",[375,387,389],{"class":388},"s2Zo4"," defineAppConfig",[375,391,393],{"class":392},"sTEyZ","(",[375,395,397],{"class":396},"sMK4o","{\n",[375,399,401,405,408],{"class":377,"line":400},2,[375,402,404],{"class":403},"swJcz","  ui",[375,406,407],{"class":396},":",[375,409,410],{"class":396}," {\n",[375,412,414,417,419,422,425,427,430,434,437,440,443,445,447,450,452],{"class":377,"line":413},3,[375,415,416],{"class":403},"    colors",[375,418,407],{"class":396},[375,420,421],{"class":396}," {",[375,423,424],{"class":403}," primary",[375,426,407],{"class":396},[375,428,429],{"class":396}," '",[375,431,433],{"class":432},"sfazB","claude",[375,435,436],{"class":396},"'",[375,438,439],{"class":396},",",[375,441,442],{"class":403}," neutral",[375,444,407],{"class":396},[375,446,429],{"class":396},[375,448,449],{"class":432},"stone",[375,451,436],{"class":396},[375,453,454],{"class":396}," },\n",[375,456,458,461,463,465,468,470,472,475,477,479,481,483,485,488,490,492,495,497,500],{"class":377,"line":457},4,[375,459,460],{"class":403},"    card",[375,462,407],{"class":396},[375,464,421],{"class":396},[375,466,467],{"class":403}," slots",[375,469,407],{"class":396},[375,471,421],{"class":396},[375,473,474],{"class":403}," root",[375,476,407],{"class":396},[375,478,429],{"class":396},[375,480,261],{"class":432},[375,482,436],{"class":396},[375,484,439],{"class":396},[375,486,487],{"class":403}," title",[375,489,407],{"class":396},[375,491,429],{"class":396},[375,493,494],{"class":432},"font-heading",[375,496,436],{"class":396},[375,498,499],{"class":396}," }",[375,501,502],{"class":396}," }\n",[375,504,506],{"class":377,"line":505},5,[375,507,508],{"class":396},"  }\n",[375,510,512,515],{"class":377,"line":511},6,[375,513,514],{"class":396},"}",[375,516,517],{"class":392},")\n",[10,519,520,521,524,525,528,529,531],{},"Para ajustar ",[14,522,523],{},"una sola instancia"," no toques el global: usa la prop ",[28,526,527],{},":ui=\"{ slot: '...' }\""," sobre esa instancia. Y recuerda que las ",[28,530,34],{}," ganan a las utilidades: para anular una superficie puntual necesitas una regla propia.",[48,533,535],{"id":534},"patrones-de-la-casa","Patrones de la casa",[127,537,539],{"id":538},"card-con-cabecera-de-icono","Card con cabecera de icono",[10,541,542],{},"El patrón que usan las páginas reales (icono en squircle, título de una línea, subtítulo de una):",[366,544,548],{"className":545,"code":546,"language":547,"meta":371,"style":371},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003CUPageCard variant=\"subtle\">\n  \u003Ctemplate #header>\n    \u003Cdiv class=\"flex items-center gap-4 p-1\">\n      \u003Cdiv class=\"flex items-center justify-center w-11 h-11 rounded-xl bg-primary\u002F10 shrink-0\">\n        \u003CUIcon name=\"i-lucide-lock-keyhole\" class=\"w-6 h-6 text-primary\" \u002F>\n      \u003C\u002Fdiv>\n      \u003Cdiv>\n        \u003Ch3 class=\"text-base font-semibold\">Título\u003C\u002Fh3>\n        \u003Cp class=\"text-sm text-muted\">Una frase de subtítulo\u003C\u002Fp>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Ftemplate>\n\u003C\u002FUPageCard>\n","vue",[28,549,550,576,581,586,591,596,601,607,613,619,624,630,636],{"__ignoreMap":371},[375,551,552,555,558,562,565,568,571,573],{"class":377,"line":378},[375,553,554],{"class":396},"\u003C",[375,556,557],{"class":403},"UPageCard",[375,559,561],{"class":560},"spNyl"," variant",[375,563,564],{"class":396},"=",[375,566,567],{"class":396},"\"",[375,569,570],{"class":432},"subtle",[375,572,567],{"class":396},[375,574,575],{"class":396},">\n",[375,577,578],{"class":377,"line":400},[375,579,580],{"class":392},"  \u003Ctemplate #header>\n",[375,582,583],{"class":377,"line":413},[375,584,585],{"class":392},"    \u003Cdiv class=\"flex items-center gap-4 p-1\">\n",[375,587,588],{"class":377,"line":457},[375,589,590],{"class":392},"      \u003Cdiv class=\"flex items-center justify-center w-11 h-11 rounded-xl bg-primary\u002F10 shrink-0\">\n",[375,592,593],{"class":377,"line":505},[375,594,595],{"class":392},"        \u003CUIcon name=\"i-lucide-lock-keyhole\" class=\"w-6 h-6 text-primary\" \u002F>\n",[375,597,598],{"class":377,"line":511},[375,599,600],{"class":392},"      \u003C\u002Fdiv>\n",[375,602,604],{"class":377,"line":603},7,[375,605,606],{"class":392},"      \u003Cdiv>\n",[375,608,610],{"class":377,"line":609},8,[375,611,612],{"class":392},"        \u003Ch3 class=\"text-base font-semibold\">Título\u003C\u002Fh3>\n",[375,614,616],{"class":377,"line":615},9,[375,617,618],{"class":392},"        \u003Cp class=\"text-sm text-muted\">Una frase de subtítulo\u003C\u002Fp>\n",[375,620,622],{"class":377,"line":621},10,[375,623,600],{"class":392},[375,625,627],{"class":377,"line":626},11,[375,628,629],{"class":392},"    \u003C\u002Fdiv>\n",[375,631,633],{"class":377,"line":632},12,[375,634,635],{"class":392},"  \u003C\u002Ftemplate>\n",[375,637,639,642,644],{"class":377,"line":638},13,[375,640,641],{"class":396},"\u003C\u002F",[375,643,557],{"class":403},[375,645,575],{"class":396},[127,647,649],{"id":648},"formulario","Formulario",[10,651,652,655,656,659,660,190,663,666,667,670,671,190,674,677,678,681,682,684,685,688],{},[28,653,654],{},"\u003CUForm class=\"space-y-5\">"," → ",[28,657,658],{},"UFormField"," con ",[28,661,662],{},":label",[28,664,665],{},":description"," arriba del campo → ",[28,668,669],{},"UInput class=\"w-full\""," → fila de submit a la derecha con ",[28,672,673],{},":loading",[28,675,676],{},":disabled"," enlazados al estado de la acción. El ",[28,679,680],{},"help"," de ",[28,683,658],{}," es el que va ",[14,686,687],{},"debajo"," del input.",[127,690,692],{"id":691},"estado-de-acción-regla-del-proyecto","Estado de acción (regla del proyecto)",[10,694,695,696,407],{},"Toda acción asíncrona declara un ref con nombre de verbo, se protege contra doble clic y se resetea en ",[28,697,698],{},"finally",[366,700,702],{"className":368,"code":701,"language":370,"meta":371,"style":371},"const saving = ref(false)\n\nasync function save() {\n  if (saving.value) return\n  saving.value = true\n  try {\n    await saveMutation.mutateAsync(data)\n  } finally {\n    saving.value = false\n  }\n}\n",[28,703,704,725,731,747,768,783,790,810,820,834,838],{"__ignoreMap":371},[375,705,706,709,712,714,717,719,723],{"class":377,"line":378},[375,707,708],{"class":560},"const",[375,710,711],{"class":392}," saving ",[375,713,564],{"class":396},[375,715,716],{"class":388}," ref",[375,718,393],{"class":392},[375,720,722],{"class":721},"sfNiH","false",[375,724,517],{"class":392},[375,726,727],{"class":377,"line":400},[375,728,730],{"emptyLinePlaceholder":729},true,"\n",[375,732,733,736,739,742,745],{"class":377,"line":413},[375,734,735],{"class":560},"async",[375,737,738],{"class":560}," function",[375,740,741],{"class":388}," save",[375,743,744],{"class":396},"()",[375,746,410],{"class":396},[375,748,749,752,754,757,759,762,765],{"class":377,"line":457},[375,750,751],{"class":381},"  if",[375,753,347],{"class":403},[375,755,756],{"class":392},"saving",[375,758,202],{"class":396},[375,760,761],{"class":392},"value",[375,763,764],{"class":403},") ",[375,766,767],{"class":381},"return\n",[375,769,770,773,775,777,780],{"class":377,"line":505},[375,771,772],{"class":392},"  saving",[375,774,202],{"class":396},[375,776,761],{"class":392},[375,778,779],{"class":396}," =",[375,781,782],{"class":721}," true\n",[375,784,785,788],{"class":377,"line":511},[375,786,787],{"class":381},"  try",[375,789,410],{"class":396},[375,791,792,795,798,800,803,805,808],{"class":377,"line":603},[375,793,794],{"class":381},"    await",[375,796,797],{"class":392}," saveMutation",[375,799,202],{"class":396},[375,801,802],{"class":388},"mutateAsync",[375,804,393],{"class":403},[375,806,807],{"class":392},"data",[375,809,517],{"class":403},[375,811,812,815,818],{"class":377,"line":609},[375,813,814],{"class":396},"  }",[375,816,817],{"class":381}," finally",[375,819,410],{"class":396},[375,821,822,825,827,829,831],{"class":377,"line":615},[375,823,824],{"class":392},"    saving",[375,826,202],{"class":396},[375,828,761],{"class":392},[375,830,779],{"class":396},[375,832,833],{"class":721}," false\n",[375,835,836],{"class":377,"line":621},[375,837,508],{"class":396},[375,839,840],{"class":377,"line":626},[375,841,842],{"class":396},"}\n",[366,844,846],{"className":545,"code":845,"language":547,"meta":371,"style":371},"\u003CUButton :loading=\"saving\" :disabled=\"saving\" @click=\"save\">Guardar\u003C\u002FUButton>\n",[28,847,848],{"__ignoreMap":371},[375,849,850,852,855,858,861,863,865,867,869,871,874,876,878,880,882,885,888,890,892,895,897,900,903,905,907],{"class":377,"line":378},[375,851,554],{"class":396},[375,853,854],{"class":403},"UButton",[375,856,857],{"class":396}," :",[375,859,860],{"class":560},"loading",[375,862,564],{"class":396},[375,864,567],{"class":396},[375,866,756],{"class":392},[375,868,567],{"class":396},[375,870,857],{"class":396},[375,872,873],{"class":560},"disabled",[375,875,564],{"class":396},[375,877,567],{"class":396},[375,879,756],{"class":392},[375,881,567],{"class":396},[375,883,884],{"class":396}," @",[375,886,887],{"class":560},"click",[375,889,564],{"class":396},[375,891,567],{"class":396},[375,893,894],{"class":392},"save",[375,896,567],{"class":396},[375,898,899],{"class":396},">",[375,901,902],{"class":392},"Guardar",[375,904,641],{"class":396},[375,906,854],{"class":403},[375,908,575],{"class":396},[48,910,912],{"id":911},"qué-no-hacer","Qué no hacer",[366,914,916],{"className":545,"code":915,"language":547,"meta":371,"style":371},"\u003C!-- ❌ Colores y sombras literales, se rompen en el modo contrario -->\n\u003Cdiv class=\"bg-white text-black shadow-[0_1px_3px_rgba(0,0,0,0.2)]\">…\u003C\u002Fdiv>\n\n\u003C!-- ✅ Superficie del sistema + utilidades semánticas -->\n\u003Cdiv class=\"ds-card rounded-lg p-5 text-highlighted\">…\u003C\u002Fdiv>\n\n\u003C!-- ❌ Un segundo acento inventado -->\n\u003CUBadge class=\"bg-purple-500\">…\u003C\u002FUBadge>\n\n\u003C!-- ✅ El acento es `primary` (o un color de estado para señales) -->\n\u003CUBadge color=\"primary\">…\u003C\u002FUBadge>\n",[28,917,918,924,954,958,963,990,994,999,1027,1031,1036],{"__ignoreMap":371},[375,919,920],{"class":377,"line":378},[375,921,923],{"class":922},"sHwdD","\u003C!-- ❌ Colores y sombras literales, se rompen en el modo contrario -->\n",[375,925,926,928,931,934,936,938,941,943,945,948,950,952],{"class":377,"line":400},[375,927,554],{"class":396},[375,929,930],{"class":403},"div",[375,932,933],{"class":560}," class",[375,935,564],{"class":396},[375,937,567],{"class":396},[375,939,940],{"class":432},"bg-white text-black shadow-[0_1px_3px_rgba(0,0,0,0.2)]",[375,942,567],{"class":396},[375,944,899],{"class":396},[375,946,947],{"class":392},"…",[375,949,641],{"class":396},[375,951,930],{"class":403},[375,953,575],{"class":396},[375,955,956],{"class":377,"line":413},[375,957,730],{"emptyLinePlaceholder":729},[375,959,960],{"class":377,"line":457},[375,961,962],{"class":922},"\u003C!-- ✅ Superficie del sistema + utilidades semánticas -->\n",[375,964,965,967,969,971,973,975,978,980,982,984,986,988],{"class":377,"line":505},[375,966,554],{"class":396},[375,968,930],{"class":403},[375,970,933],{"class":560},[375,972,564],{"class":396},[375,974,567],{"class":396},[375,976,977],{"class":432},"ds-card rounded-lg p-5 text-highlighted",[375,979,567],{"class":396},[375,981,899],{"class":396},[375,983,947],{"class":392},[375,985,641],{"class":396},[375,987,930],{"class":403},[375,989,575],{"class":396},[375,991,992],{"class":377,"line":511},[375,993,730],{"emptyLinePlaceholder":729},[375,995,996],{"class":377,"line":603},[375,997,998],{"class":922},"\u003C!-- ❌ Un segundo acento inventado -->\n",[375,1000,1001,1003,1006,1008,1010,1012,1015,1017,1019,1021,1023,1025],{"class":377,"line":609},[375,1002,554],{"class":396},[375,1004,1005],{"class":403},"UBadge",[375,1007,933],{"class":560},[375,1009,564],{"class":396},[375,1011,567],{"class":396},[375,1013,1014],{"class":432},"bg-purple-500",[375,1016,567],{"class":396},[375,1018,899],{"class":396},[375,1020,947],{"class":392},[375,1022,641],{"class":396},[375,1024,1005],{"class":403},[375,1026,575],{"class":396},[375,1028,1029],{"class":377,"line":615},[375,1030,730],{"emptyLinePlaceholder":729},[375,1032,1033],{"class":377,"line":621},[375,1034,1035],{"class":922},"\u003C!-- ✅ El acento es `primary` (o un color de estado para señales) -->\n",[375,1037,1038,1040,1042,1045,1047,1049,1052,1054,1056,1058,1060,1062],{"class":377,"line":626},[375,1039,554],{"class":396},[375,1041,1005],{"class":403},[375,1043,1044],{"class":560}," color",[375,1046,564],{"class":396},[375,1048,567],{"class":396},[375,1050,1051],{"class":432},"primary",[375,1053,567],{"class":396},[375,1055,899],{"class":396},[375,1057,947],{"class":392},[375,1059,641],{"class":396},[375,1061,1005],{"class":403},[375,1063,575],{"class":396},[48,1065,1067],{"id":1066},"verificación","Verificación",[132,1069,1070,1076,1082,1100],{},[135,1071,1072,1073,202],{},"Cambia con el toggle de tema (menú del usuario o controles de apariencia de las páginas públicas): un cambio está hecho solo cuando se ve bien en ",[14,1074,1075],{},"claro y oscuro",[135,1077,1078,1081],{},[28,1079,1080],{},"pnpm lint"," no valida colores; la prueba real es el navegador.",[135,1083,1084,1085,681,1088,1091,1092,1095,1096,1099],{},"Si tocaste tokens, revisa también el ",[28,1086,1087],{},"theme-color",[28,1089,1090],{},"app\u002Fapp.vue"," (claro ",[28,1093,1094],{},"#faf9f5",", oscuro ",[28,1097,1098],{},"#1f1e1b",").",[135,1101,1102,1103,1106,1107,1109],{},"Para colores nuevos: la paleta necesita los 11 pasos (",[28,1104,1105],{},"50…950",") y se registra como alias en ",[28,1108,177],{},", no como hex suelto.",[1111,1112,1113],"style",{},"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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}",{"title":371,"searchDepth":400,"depth":400,"links":1115},[1116,1117,1123,1128,1129],{"id":50,"depth":400,"text":51},{"id":124,"depth":400,"text":125,"children":1118},[1119,1120,1122],{"id":129,"depth":413,"text":130},{"id":234,"depth":413,"text":1121},"2. Clases .ds-*",{"id":358,"depth":413,"text":359},{"id":534,"depth":400,"text":535,"children":1124},[1125,1126,1127],{"id":538,"depth":413,"text":539},{"id":648,"depth":413,"text":649},{"id":691,"depth":413,"text":692},{"id":911,"depth":400,"text":912},{"id":1066,"depth":400,"text":1067},"Los tres niveles del sistema (tokens, clases .ds-*, temas de componentes) y las reglas para no salirse de él.","md",{},{"icon":1134},"i-lucide-swatch-book","\u002Fdocs\u002Fdesign-system",{"title":5,"description":1130},"docs\u002F3.design-system","9vXJbrcAL9-_3STXPmoRz1HQo69Px5jGVG3X-v8-cMM",[1140,1146],{"title":1141,"path":1142,"stem":1143,"description":1144,"icon":1145,"children":-1},"Ramas y flujo de trabajo","\u002Fdocs\u002Fbranching","docs\u002F2.branching","El modelo de dos ramas permanentes, los pasos para features y fixes, y qué corre en cada gate.","i-lucide-git-branch",{"title":1147,"path":1148,"stem":1149,"description":1150,"icon":1151,"children":-1},"Deploy y CI\u002FCD","\u002Fdocs\u002Fdeploy","docs\u002F4.deploy","El pipeline completo (hooks, CI, Dokploy), los dos entornos y las reglas de migración y rollback.","i-lucide-cloud-upload",[1153],{"title":1154,"path":1155,"stem":1156,"children":1157,"page":1166},"Docs","\u002Fdocs","docs",[1158,1163,1164,1165],{"title":1159,"path":1160,"stem":1161,"icon":1162},"Guía de setup","\u002Fdocs\u002Fsetup","docs\u002F1.setup","i-lucide-rocket",{"title":1141,"path":1142,"stem":1143,"icon":1145},{"title":5,"path":1135,"stem":1137,"icon":1134},{"title":1147,"path":1148,"stem":1149,"icon":1151},false,1791214063325]