Herramientas para creadores · Nuevo recurso

Sistema de diseño Kajabi Sage.

Crea un panel para compartir dirigido a creadores, con contexto claro del curso, acciones de copia evidentes y mensajes fiables sobre el portapapeles. Explora la anatomía de los componentes Rails de Sage, sus especificaciones tipográficas publicadas y la capa de tokens Pine, más reciente y cargada externamente.

Guía de OpenDesign7 capítulos42 entradas de referenciaGuía de aplicación original
01

Vista previa de la interfaz del sistema de diseño Kajabi Sage

Elige un curso ficticio, revisa un enlace o mensaje y copia exactamente el contenido visible, con una alternativa manual.

Panel para compartir cursos para creadoresAbrir ejemplo completo
Interpretación independiente y nativa de HTML que sigue la estructura de Texto para copiar de Sage, las especificaciones tipográficas publicadas y los valores predeterminados/claros vigentes de Pine. Sin entorno de ejecución de Sage ni paquete de fuentes propietario. · Referencia de implementación
02

Referencia de diseño del sistema de diseño Kajabi Sage

Documentación pública de componentes y tipografía de Sage, además de la hoja de estilos predeterminada/clara de Pine que carga la documentación actual. La tabla tipográfica publicada de Sage y los alias más recientes de Pine son referencias distintas; no los trates como si fueran idénticos.

Funciones de color vigentes de Pine

Fuente
Nombre / ReglaValor / ConfiguraciónUso
--pine-color-primaryvar(--pine-color-grey-900)Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-color-primary-hovervar(--pine-color-grey-950)Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-color-textvar(--pine-color-grey-900)Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-color-text-primaryvar(--pine-color-white)Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-color-background-appvar(--pine-color-grey-100)Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-color-background-containervar(--pine-color-white)Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-color-bordervar(--pine-color-grey-300)Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.

Colores primitivos vigentes de Pine

Fuente
Nombre / ReglaValor / ConfiguraciónUso
--pine-color-grey-100#f8f8f8 Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-color-grey-300#d2d1d1 Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-color-grey-900#343332 Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-color-grey-950#1a1a19 Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-color-white#ffffff Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.

Dimensiones y radio vigentes de Pine

Fuente
Nombre / ReglaValor / ConfiguraciónUso
--pine-dimension-xsvar(--pine-dimension-100)Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-dimension-smvar(--pine-dimension-200)Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-dimension-mdvar(--pine-dimension-300)Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-dimension-lgvar(--pine-dimension-400)Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-dimension-1008pxInstantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-dimension-20016pxInstantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-dimension-30024pxInstantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-dimension-40032pxInstantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-border-radius-mdvar(--pine-dimension-125)Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-dimension-12510pxInstantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-border-radius-full9999pxInstantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.

Entrada tipográfica vigente de Pine

Fuente
Nombre / ReglaValor / ConfiguraciónUso
--pine-font-family-bodyvar(--pine-font-family-inter)Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-font-family-inter"Inter", system-ui, "Segoe UI", "Roboto", "Ubuntu", sans-serifInstantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-font-size-body-mdvar(--pine-font-size-100)Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-font-size-10014pxInstantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-font-size-body-lgvar(--pine-font-size-116)Instantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.
--pine-font-size-11616pxInstantánea de la hoja de estilos predeterminada/clara actual de Pine, cargada por la documentación de Sage.

Clases tipográficas publicadas de Sage

Fuente
Nombre / ReglaValor / ConfiguraciónUso
t-sage-heading-140px / 48px; 700; -0.6px trackingEspecificación tipográfica de la documentación publicada.
t-sage-heading-232px / 40px; 700; -0.5pxEspecificación publicada para encabezados.
t-sage-heading-328px / 32px; 700; -0.15pxEspecificación publicada para encabezados.
t-sage-heading-424px / 32px; 600; -0.15pxEspecificación publicada para encabezados.
t-sage-body16px / 24px; 400Especificación publicada para el texto de cuerpo.
t-sage-body-small14px / 20px; 400Especificación tipográfica de apoyo publicada.
t-sage-body-xsmall12px / 16px; 400Especificación publicada para el texto de cuerpo más pequeño.
Body weight suffixes-med 500 / -semi 600 / -bold 700Añadir a la familia de clases de texto de cuerpo.

Propiedades del componente para copiar

Fuente
Nombre / ReglaValor / ConfiguraciónUso
SageCopyText.valueRequired stringTexto que se muestra y se copia.
semiboldBoolean, default falseÉnfasis en todo el bloque.
SageCopyButton.fill_containerBoolean, default falseEl botón para copiar ocupa todo el contenedor.
SageCopyButton.borderlessBoolean exampleAcción para copiar con énfasis bajo.
SageCopyTextCard.truncate_contentstrue enables truncationLimita el contenido largo solo si el texto completo sigue estando disponible.
03

Guía completa del sistema de diseño Kajabi Sage

Una guía práctica para elegir, aplicar y revisar este sistema en una interfaz real.

DESIGN-kajabi-sage.md

Orientación completa, un punto de partida para la implementación y enlaces al código fuente.

Descargar la guía

Sistema de diseño Kajabi Sage: un panel para compartir en un flujo de trabajo para creadores

El curso se distingue junto a su enlace

Sage da servicio a las interfaces de creación y comercio de conocimiento de Kajabi. Un panel para compartir cursos es una composición breve útil porque combina el contexto del producto, un valor técnico largo y una acción cuyo éxito puede fallar independientemente de la página. El ejemplo incluye dos cursos ficticios con ilustraciones de portada originales, una URL para estudiantes y un mensaje listo para enviar por correo electrónico.

De esta guía de OpenDesign

Al cambiar el curso se actualizan ambos resultados. Al cambiar el formato de salida, cambia el texto que se copiará, mientras el curso seleccionado permanece visible. No se publica ni se envía nada; el único efecto secundario opcional ocurre cuando alguien activa el botón del portapapeles.

Consulta la especificación complementaria

El sistema de diseño Kajabi Sage y Pine tienen un límite de dependencia explícito

Una función de color de CSS no siempre devuelve un valor hexadecimal

El README actual de Sage Assets indica que la aplicación que los consume carga los tokens de Pine, que no están incluidos en sage-assets. Distingue sage-color(), que devuelve una variable semántica de CSS, de sage-color-hex(), que lee valores heredados para las operaciones de color de Sass. Una función de color que ahora devuelve var(...) no se puede usar de forma segura en un cálculo hexadecimal en tiempo de compilación.

La documentación vigente carga @kajabi-ui/styles/dist/pine/pine.css. En la raíz predeterminada/clara de esa hoja de estilos, la función principal se resuelve mediante grey-900, mientras que el ejemplo hexadecimal del README anterior usa azul. La guía mantiene separados estos hechos: el primero es la función semántica vigente; el segundo ilustra una consulta hexadecimal heredada. Una nueva implementación no debe sustituir una por otra basándose en suposiciones.

Consulta la especificación complementaria

Sistema de diseño Kajabi Sage: sobriedad en la aplicación, expresividad en el contenido

Asocia los colores de acción con su significado

Las pautas de color de Sage usan el color para identificar interacciones, estados seleccionados y comentarios, en lugar de añadir una personalidad arbitraria a la interfaz. El ejemplo mantiene neutral el marco de la aplicación; las ilustraciones de los cursos aportan el color expresivo. Así, es fácil localizar la acción para copiar sin dar a cada panel un tono distinto de estado.

El estado de éxito corresponde a una escritura exitosa en el portapapeles. Si se bloquea el acceso al portapapeles, se debe mostrar una alternativa práctica para copiar manualmente, no un mensaje verde de éxito. El curso seleccionado y el formato de salida seleccionado tienen estados de control propios, independientes del último resultado al copiar.

Consulta la especificación complementaria

Sistema de diseño Kajabi Sage: especificaciones publicadas de Sage y alias actuales de tokens

La función tipográfica y la semántica de HTML son independientes

La tabla publicada de Sage ofrece las clases t-sage-heading y t-sage-body con combinaciones exactas de tamaño, altura de línea y peso. Resulta útil para reproducir esa especificación documentada. La hoja de estilos más reciente de Pine también expone sus propios alias de texto de cuerpo, incluido un estilo de cuerpo mediano de 14 píxeles, así que una integración actual debería comprobar qué capa consume su componente.

Aplicar una clase visual de encabezado a un elemento no cambia su nivel semántico. El nombre del curso sigue siendo un encabezado, la URL sigue siendo contenido de formulario y la acción de copiar sigue siendo un botón. La vista previa usa el estilo publicado de encabezado Sage 32/40 y texto de lectura 16/24, con una fuente alternativa del sistema; no da a entender que incluya los archivos de fuentes.

Consulta la especificación complementaria

Sistema de diseño Kajabi Sage: texto de copia, botón de copia y tarjeta de texto de copia

Elige la estructura según el contenido

La documentación distingue entre texto de copia en línea, una tarjeta en bloque y un botón de copia. El bloque resulta útil cuando una etiqueta y varias líneas deben permanecer agrupadas. Un botón puede ocupar todo el contenedor o presentarse sin bordes, y el peso seminegrita se aplica en el nivel del componente.

El ejemplo usa un área de texto de solo lectura para el contenido activo. Es una decisión intencional de implementación nativa: permite seleccionar el texto cuando no se puede acceder al portapapeles y facilita la lectura de un mensaje de correo de varias líneas. Su valor es exactamente el contenido que se envía al navegador, sin etiquetas adicionales invisibles ni identificadores de curso obsoletos.

  • El texto de copia en línea es adecuado para un único valor breve junto a otro texto.
  • Una tarjeta de copia agrupa líneas relacionadas y ofrece espacio suficiente para revisarlas.
  • Un botón separado deja clara la acción cuando el valor es largo o tiene varias líneas.

Consulta la especificación complementaria

Sistema de diseño Kajabi Sage: los enlaces largos no deben desbordar el panel

Una composición de dos columnas que pasa a ser secuencial

El ejemplo de escritorio sitúa una columna de selección de cursos junto al curso activo y los controles para compartir. En pantallas pequeñas, la columna se convierte en dos tarjetas horizontales y, a continuación, aparece el panel para compartir. El campo del valor ajusta las líneas a su contenedor y el botón permanece visible debajo.

La guía oficial de Copy Text recomienda establecer un ancho máximo local y ofrece la opción de truncar el contenido de las tarjetas. Este ejemplo opta por ajustar las líneas y permitir la selección manual, en vez de ocultar una parte esencial de la URL. El espaciado sigue los pasos verificados de 8/16/24/32 de Pine, mientras que la proporción de las columnas y el punto de quiebre son decisiones de la aplicación.

Consulta la especificación complementaria

Sistema de diseño Kajabi Sage: un ejemplo público completo y una alternativa nativa transparente

Copia solo cuando la persona active la acción

La configuración independiente carga los tokens públicos de Pine y proporciona su propio HTML y controlador del portapapeles. Puede ejecutarse sin una cuenta del paquete Sage. El ejemplo nativo de Rails se identifica por separado como una composición para una aplicación Sage existente; no afirma que pegar solo un helper instale el sistema.

Sage Assets declara GitHub Packages como su registro de publicación. Los equipos que utilicen esta vía deben acceder al registro autorizado y cargar la capa externa de Pine antes de usar variables de color semánticas. La documentación también señala restricciones en los dominios de las fuentes, por lo que una alternativa del sistema resulta más transparente que suponer, sin indicarlo, que las fuentes de marca se cargaron correctamente.

  1. Abre el ejemplo independiente desde localhost o HTTPS y selecciona un curso y un formato de contenido.
  2. Activa la copia; informa del éxito solo cuando se resuelva la promesa del portapapeles. De lo contrario, permite seleccionar el texto para copiarlo manualmente.
  3. Cambia el curso o el formato y borra el estado de copia anterior para que nunca describa un contenido obsoleto.

Consulta la especificación complementaria

Ejemplos de componentes del sistema de diseño Kajabi Sage

Muestra interactiva independiente completa

Guarda el documento completo como index.html y ábrelo en un navegador. Interpretación nativa e independiente de HTML de la estructura de Copy Text de Sage, las especificaciones tipográficas publicadas y los valores predeterminados/claros actuales de Pine. No requiere el entorno de ejecución de Sage ni un paquete de fuentes propietario.

HTML
<!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Course sharing — Sage interpretation</title><style>*{box-sizing:border-box}body{margin:0;background:#f8f8f8;color:#343332;font:16px/1.5 system-ui,sans-serif}main{max-width:1120px;margin:auto;padding:32px}.top{display:flex;justify-content:space-between;font-size:12px;letter-spacing:.08em;border-bottom:1px solid #d2d1d1;padding-bottom:16px;gap:16px}h1{font-size:32px;line-height:40px;letter-spacing:-.5px;margin:24px 0 8px}h2{font-size:24px;line-height:32px;margin:0 0 8px}.intro{margin:0 0 24px;color:#6c6a69}.grid{display:grid;grid-template-columns:240px 1fr;gap:24px}.courses{display:grid;gap:16px;align-content:start}.course{background:white;border:1px solid #d2d1d1;border-radius:10px;padding:12px;text-align:left;color:inherit;font:inherit;cursor:pointer}.course[aria-pressed=true]{border:2px solid #343332;padding:11px}.course small{display:block;font-size:12px;color:#6c6a69}.art{position:relative;overflow:hidden;border-radius:6px;display:grid;place-content:center;letter-spacing:.08em;font-size:11px;text-align:center}.art b{z-index:1;position:relative;line-height:1.2}.art.studio{background:#f2b9a5;color:#682923}.art.studio:before{content:'';position:absolute;border-radius:50%;width:150px;height:150px;background:#c26e4f;right:-40px;top:25px}.art.studio:after{content:'';position:absolute;width:55px;height:120px;background:#f9e7bc;transform:rotate(25deg);left:20px;top:-20px}.art.journal{background:#d1ddaa;color:#203a30}.art.journal:before{content:'';position:absolute;width:100px;height:160px;border:22px solid #68865b;border-radius:60% 0;transform:rotate(20deg);right:5px;top:-5px}.art.journal:after{content:'';position:absolute;width:90px;height:70px;border:18px solid #b29f59;border-radius:50%;left:-30px;bottom:-20px}.course .art{height:115px;margin-bottom:12px}.panel{background:white;padding:24px;border:1px solid #d2d1d1;border-radius:10px}.hero{display:grid;grid-template-columns:140px 1fr;gap:24px;align-items:center;margin-bottom:24px}.hero .art{height:140px}.hero p{font-size:14px;color:#6c6a69;margin:0}.format{display:flex;gap:16px;border-bottom:1px solid #d2d1d1;margin-bottom:24px}.format button{background:none;border:0;border-bottom:3px solid transparent;padding:10px 0;font:inherit;color:#6c6a69;cursor:pointer}.format button[aria-pressed=true]{border-bottom-color:#343332;color:#343332}label{display:block;font-size:14px;font-weight:600;margin-bottom:8px}textarea{width:100%;resize:vertical;min-height:135px;border:1px solid #d2d1d1;border-radius:10px;padding:16px;font:14px/1.5 system-ui;background:#fcfcfc;color:#343332}.copy{font:600 14px/20px system-ui;border:0;border-radius:9999px;background:#343332;color:white;padding:12px 24px;cursor:pointer;margin-top:16px}.copy:hover{background:#1a1a19}button:focus-visible,textarea:focus-visible{outline:3px solid #6c6a69;outline-offset:3px}.status{min-height:42px;font-size:13px;color:#4d4d4c}.foot{font-size:12px;color:#6c6a69;margin-top:24px}@media(max-width:650px){main{padding:20px}.grid{grid-template-columns:1fr}.courses{grid-template-columns:1fr 1fr;gap:12px}.course .art{height:85px}.hero{grid-template-columns:90px 1fr;gap:16px}.hero .art{height:110px}.panel{padding:20px}.top{flex-direction:column;gap:4px}h1{font-size:28px;line-height:36px}h2{font-size:20px;line-height:28px}}</style><main><header class="top"><b>CREATOR WORKSPACE</b><span>Local sharing specimen</span></header><h1>Give your course a clear invitation.</h1><p class="intro">Choose a sample course and prepare the exact text to share.</p><div class="grid"><nav class="courses" aria-label="Choose a course"><button class="course" data-course="studio" aria-pressed="true"><div class="art studio" aria-hidden="true"><b>STUDIO<br>NOTES</b></div><b>Studio Notes</b><small>6 lessons · Original sample</small></button><button class="course" data-course="journal" aria-pressed="false"><div class="art journal" aria-hidden="true"><b>FIELD<br>JOURNAL</b></div><b>Field Journal</b><small>4 lessons · Original sample</small></button></nav><section class="panel"><div class="hero"><div id="cover" class="art studio" aria-hidden="true"><b>STUDIO<br>NOTES</b></div><div><h2 id="title">Studio Notes</h2><p id="description">A fictional course about building a daily creative practice.</p></div></div><div class="format" aria-label="Copy format"><button data-format="link" aria-pressed="true">Course link</button><button data-format="message" aria-pressed="false">Invitation text</button></div><label for="payload">Text to copy</label><textarea id="payload" readonly></textarea><button id="copy" class="copy" type="button">Copy visible text</button><p class="status" id="status" role="status"></p></section></div><p class="foot">Independent Sage interpretation using verified Pine light-theme colors and dimensions. Original course covers; system-font fallback. No course is published and no message is sent.</p></main><script>const courses={studio:{name:'Studio Notes',slug:'studio-notes',desc:'A fictional course about building a daily creative practice.',art:'STUDIO<br>NOTES'},journal:{name:'Field Journal',slug:'field-journal',desc:'A fictional course about observing, collecting and recording ideas.',art:'FIELD<br>JOURNAL'}};let selected='studio',format='link';const payload=document.querySelector('#payload'),status=document.querySelector('#status');function render(){const c=courses[selected],url='https://example.com/courses/'+c.slug;document.querySelector('#title').textContent=c.name;document.querySelector('#description').textContent=c.desc;document.querySelector('#cover').className='art '+selected;document.querySelector('#cover').innerHTML='<b>'+c.art+'</b>';payload.value=format==='link'?url:'You are invited to explore '+c.name+'.\n\n'+c.desc+'\n\nView the sample: '+url;document.querySelectorAll('[data-course]').forEach(b=>b.setAttribute('aria-pressed',b.dataset.course===selected));document.querySelectorAll('[data-format]').forEach(b=>b.setAttribute('aria-pressed',b.dataset.format===format));status.textContent=''}document.querySelectorAll('[data-course]').forEach(b=>b.onclick=()=>{selected=b.dataset.course;render()});document.querySelectorAll('[data-format]').forEach(b=>b.onclick=()=>{format=b.dataset.format;render()});document.querySelector('#copy').onclick=async()=>{try{await navigator.clipboard.writeText(payload.value);status.textContent='Visible text copied.'}catch{payload.focus();payload.select();status.textContent='Copy was unavailable. The text is selected; copy it manually.'}};render();</script></html>

Referencia de código

  • Los intentos de copia usan el portapapeles del navegador API y ofrecen una alternativa de copia manual. Los cursos ilustrados son originales; los componentes CopyText nativos de Rails se documentan por separado.

Interacción de copia completa con gestión de errores

El texto copiado sigue siendo seleccionable si los permisos del navegador o el contexto de inserción impiden escribir en el portapapeles.

HTML
<!doctype html>
<html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Share a sample course link</title>
<!-- Public Pine token stylesheet used by the Sage documentation. Pin its reviewed package version in production. -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@kajabi-ui/styles@latest/dist/pine/pine.css">
<style>
body{font-family:var(--pine-font-family-body);color:var(--pine-color-text);background:var(--pine-color-background-app);padding:var(--pine-dimension-md)}
main{max-width:42rem;margin:auto;background:var(--pine-color-background-container);padding:var(--pine-dimension-md);border:var(--pine-border-width) solid var(--pine-color-border);border-radius:var(--pine-border-radius-md)}
textarea{box-sizing:border-box;width:100%;padding:var(--pine-dimension-sm);font:inherit;resize:vertical}
button{font:inherit;cursor:pointer;margin-top:var(--pine-dimension-sm);padding:var(--pine-dimension-xs) var(--pine-dimension-sm)}
button:focus-visible,textarea:focus-visible{outline:2px solid currentColor;outline-offset:3px}
</style><main><h1>Share a sample course link</h1><p>This is a fictional course URL.</p>
<label for="link">Text to copy</label><textarea id="link" readonly rows="2">https://example.com/courses/studio-notes</textarea>
<button type="button" id="copy">Copy course link</button><p id="message" role="status"></p></main>
<script>
const field=document.querySelector('#link'),message=document.querySelector('#message');
document.querySelector('#copy').onclick=async()=>{
 try{await navigator.clipboard.writeText(field.value);message.textContent='Course link copied.'}
 catch{field.focus();field.select();message.textContent='Copy was unavailable. The link is selected; copy it manually.'}
};
</script></html>

Referencia de código

  • La promesa del portapapeles debe resolverse antes de mostrar el mensaje «Copiado».
  • El valor visible y el valor copiado son la misma cadena.
  • Esta es una implementación independiente que usa tokens publicados de Pine, no una API de portapapeles de Sage inventada.

Estructura nativa de copia de Sage en Rails

Usa los helpers documentados de Rails dentro de una aplicación Sage en Rails ya configurada.

erb
<h2 class="t-sage-heading-4">Course link</h2>
<%= sage_component SageCopyTextCard, {} do %>
  <p><b>Course:</b> Studio Notes</p>
  <p>https://example.com/courses/studio-notes</p>
<% end %>
<%= sage_component SageCopyButton, { value: "https://example.com/courses/studio-notes", semibold: true, fill_container: true } %>

Referencia de código

  • Los helpers requieren la integración existente de Sage Rails, los recursos y el sistema-JavaScript.
  • Aplica el peso seminegrita a todo el componente en vez de añadir una regla de negrita general.
04

Configuración del agente de IA del sistema de diseño Kajabi Sage

Punto de partida para la implementación

Implementación independiente completa con tokens públicos; guarda el contenido en un archivo HTML y sírvelo desde localhost o HTTPS para que funcione el portapapeles. No carga componentes de Sage Rails/React. Los recursos nativos de Sage se distribuyen mediante el registro GitHub Packages, y el README actual de recursos indica que los tokens de Pine deben cargarse por separado.

HTML
<!doctype html>
<html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Share a sample course link</title>
<!-- Public Pine token stylesheet used by the Sage documentation. Pin its reviewed package version in production. -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@kajabi-ui/styles@latest/dist/pine/pine.css">
<style>
body{font-family:var(--pine-font-family-body);color:var(--pine-color-text);background:var(--pine-color-background-app);padding:var(--pine-dimension-md)}
main{max-width:42rem;margin:auto;background:var(--pine-color-background-container);padding:var(--pine-dimension-md);border:var(--pine-border-width) solid var(--pine-color-border);border-radius:var(--pine-border-radius-md)}
textarea{box-sizing:border-box;width:100%;padding:var(--pine-dimension-sm);font:inherit;resize:vertical}
button{font:inherit;cursor:pointer;margin-top:var(--pine-dimension-sm);padding:var(--pine-dimension-xs) var(--pine-dimension-sm)}
button:focus-visible,textarea:focus-visible{outline:2px solid currentColor;outline-offset:3px}
</style><main><h1>Share a sample course link</h1><p>This is a fictional course URL.</p>
<label for="link">Text to copy</label><textarea id="link" readonly rows="2">https://example.com/courses/studio-notes</textarea>
<button type="button" id="copy">Copy course link</button><p id="message" role="status"></p></main>
<script>
const field=document.querySelector('#link'),message=document.querySelector('#message');
document.querySelector('#copy').onclick=async()=>{
 try{await navigator.clipboard.writeText(field.value);message.textContent='Course link copied.'}
 catch{field.focus();field.select();message.textContent='Copy was unavailable. The link is selected; copy it manually.'}
};
</script></html>

Una instrucción para tu proyecto

Instrucción para el agente
Crea un panel Kajabi Sage para compartir cursos que permita seleccionar un curso explícitamente y copiar su contenido. Mantén clara la distinción entre la tipografía publicada de Sage y la capa de tokens de Pine cargada externamente. Muestra el contenido exacto, informa del éxito de la copia solo después de que se complete y permite la selección manual si está bloqueada. No uses cursos, clientes ni integraciones de publicación reales.
05

Fuentes y alcance del sistema de diseño Kajabi Sage

Guía independiente de OpenDesign. Los cursos y las ilustraciones de portada son originales. La vista previa usa HTML nativo y referencias visuales documentadas; los ejemplos de Rails requieren una integración autorizada existente de Sage. No se publica ni se envía ningún contenido.