{
  "name": "stepkit-orbital-timeline",
  "type": "registry:component",
  "title": "Orbital timeline",
  "description": "A radial project timeline adapted from Jatin Yadav's MIT-labelled 21st.dev component.",
  "author": "Vladislav Stepanov",
  "dependencies": [
    "react@19.3.0",
    "react-dom@19.3.0"
  ],
  "files": [
    {
      "path": "components/stepkit/OrbitalTimeline.tsx",
      "content": "/*\n * Stepkit 0.3.0\n * Copyright (c) 2026 Vladislav Stepanov\n *\n * Original Stepkit portions in this release are licensed under the MIT License. Adapted portions identify their upstream licence and attribution in the copied source and in the entry-specific upstream notice files.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n *\n * MIT License\n *\n * Upstream attribution: Jatin Yadav, Radial Orbital Timeline, as published at\n * https://21st.dev/@jatin-yadav05/components/radial-orbital-timeline\n *\n * The upstream component page labels this component MIT License and does not\n * provide a separate copyright line. No copyright holder or year is added here.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n\"use client\";\n\nimport { useEffect, useRef, useState, type ComponentType, type CSSProperties, type MouseEvent } from \"react\";\nimport \"./styles.css\";\nimport \"./adapted-showcase.css\";\n\n/**\n * Adapted from Jatin Yadav's Radial Orbital Timeline (MIT label on 21st.dev).\n * Source: https://cdn.21st.dev/user_2ra80vx0iKMyQWJ5AESmNfFbCHD/radial-orbital-timeline/code.tsx?v=1\n * Evidence: provenance/21ST-JATIN-RADIAL-ORBITAL-LICENSE-EVIDENCE.md\n * Stepkit replaces Tailwind/shadcn primitives with native controls and scoped tokens.\n */\nexport type TimelineStatus = \"completed\" | \"in-progress\" | \"pending\";\nexport type TimelineIcon = ComponentType<{ size?: number; className?: string; \"aria-hidden\"?: boolean }>;\nexport interface TimelineItem {\n  id: number;\n  title: string;\n  date: string;\n  content: string;\n  category: string;\n  icon?: TimelineIcon;\n  relatedIds: number[];\n  status: TimelineStatus;\n  energy: number;\n}\nexport interface OrbitalTimelineProps {\n  timelineData: TimelineItem[];\n  title?: string;\n  paused?: boolean;\n  className?: string;\n}\ntype OrbitStyle = CSSProperties & Record<`--stepkit-${string}`, string | number>;\n\nfunction statusLabel(status: TimelineStatus) {\n  return status === \"completed\" ? \"COMPLETE\" : status === \"in-progress\" ? \"IN PROGRESS\" : \"PENDING\";\n}\n\nfunction FallbackIcon({ category }: { category: string }) {\n  const kind = category.toLowerCase();\n  const path = kind.includes(\"design\") ? <path d=\"m4 15 7-11 7 11-7 5-7-5Zm0 0h14\" /> : kind.includes(\"test\") ? <path d=\"M4 4h16v16H4zM8 12h8M8 8h5M8 16h6\" /> : kind.includes(\"release\") ? <path d=\"m5 12 5 5L19 8M12 3v4M12 17v4M3 12h4M17 12h4\" /> : <path d=\"M12 3 4 7v5c0 4.5 3.4 7.5 8 9 4.6-1.5 8-4.5 8-9V7l-8-4Zm0 4v7m0 3h.01\" />;\n  return <svg aria-hidden=\"true\" className=\"stepkit-orbital-timeline__fallback-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"1.7\">{path}</svg>;\n}\n\nexport function OrbitalTimeline({ timelineData, title = \"Project orbit\", paused = false, className = \"\" }: OrbitalTimelineProps) {\n  const [expandedItems, setExpandedItems] = useState<Record<number, boolean>>({});\n  const [rotationAngle, setRotationAngle] = useState(0);\n  const [autoRotate, setAutoRotate] = useState(true);\n  const [pulseEffect, setPulseEffect] = useState<Record<number, boolean>>({});\n  const [activeNodeId, setActiveNodeId] = useState<number | null>(null);\n  const [reducedMotion, setReducedMotion] = useState(false);\n  const [focusWithin, setFocusWithin] = useState(false);\n  const [orbitSize, setOrbitSize] = useState(500);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const orbitRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    const element = orbitRef.current;\n    if (!element) return;\n    const update = () => setOrbitSize(element.getBoundingClientRect().width || 500);\n    update();\n    if (typeof ResizeObserver === \"undefined\") return;\n    const observer = new ResizeObserver(update);\n    observer.observe(element);\n    return () => observer.disconnect();\n  }, []);\n\n  useEffect(() => {\n    if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") return;\n    const media = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n    const update = () => setReducedMotion(media.matches);\n    update();\n    media.addEventListener?.(\"change\", update);\n    return () => media.removeEventListener?.(\"change\", update);\n  }, []);\n\n  useEffect(() => {\n    if (!autoRotate || paused || reducedMotion || focusWithin) return;\n    const timer = window.setInterval(() => setRotationAngle((current) => (current + 0.3) % 360), 40);\n    return () => window.clearInterval(timer);\n  }, [autoRotate, paused, reducedMotion, focusWithin]);\n\n  const closeActive = () => {\n    setExpandedItems({});\n    setActiveNodeId(null);\n    setPulseEffect({});\n    setAutoRotate(true);\n  };\n\n  const handleContainerClick = (event: MouseEvent<HTMLDivElement>) => {\n    if (event.target === containerRef.current || event.target === orbitRef.current) closeActive();\n  };\n\n  const relatedItems = (id: number) => timelineData.find((item) => item.id === id)?.relatedIds ?? [];\n  const toggleItem = (id: number) => {\n    const isOpen = Boolean(expandedItems[id]);\n    const next = Object.fromEntries(Object.keys(expandedItems).map((key) => [Number(key), false])) as Record<number, boolean>;\n    next[id] = !isOpen;\n    setExpandedItems(next);\n    if (isOpen) {\n      setActiveNodeId(null);\n      setPulseEffect({});\n      setAutoRotate(true);\n      return;\n    }\n    setActiveNodeId(id);\n    setAutoRotate(false);\n    setPulseEffect(Object.fromEntries(relatedItems(id).map((relatedId) => [relatedId, true])));\n    const index = timelineData.findIndex((item) => item.id === id);\n    if (index >= 0 && timelineData.length > 0) setRotationAngle(270 - (index / timelineData.length) * 360);\n  };\n\n  const calculateNodePosition = (index: number, total: number) => {\n    const angle = ((index / total) * 360 + rotationAngle) % 360;\n    const radians = angle * (Math.PI / 180);\n    const radius = Math.max(70, Math.min(200, orbitSize / 2 - 54));\n    return {\n      x: Number((radius * Math.cos(radians)).toFixed(3)),\n      y: Number((radius * Math.sin(radians)).toFixed(3)),\n      zIndex: Math.round(100 - 50 * Math.sin(radians)),\n      opacity: Number((0.4 + 0.6 * ((1 + Math.sin(radians)) / 2)).toFixed(3)),\n    };\n  };\n\n  return (\n    <section aria-label={title} className={`stepkit stepkit-orbital-timeline${className ? ` ${className}` : \"\"}`} data-paused={paused} data-reduced-motion={reducedMotion} onFocusCapture={() => setFocusWithin(true)} onBlurCapture={(event) => { if (!event.currentTarget.contains(event.relatedTarget as Node | null)) setFocusWithin(false); }}>\n      <header className=\"stepkit-orbital-timeline__header\"><span>Radial orbital timeline</span><h2>{title}</h2><p>Follow related work around a single point of focus.</p></header>\n      <div className=\"stepkit-orbital-timeline__stage\" ref={containerRef} onClick={handleContainerClick}>\n        <div className=\"stepkit-orbital-timeline__orbit\" ref={orbitRef}>\n          <div className=\"stepkit-orbital-timeline__ring\" aria-hidden=\"true\" />\n          <div className=\"stepkit-orbital-timeline__center\" aria-hidden=\"true\"><span /><i /><i /></div>\n          {timelineData.map((item, index) => {\n            const position = calculateNodePosition(index, timelineData.length || 1);\n            const isExpanded = Boolean(expandedItems[item.id]);\n            const isRelated = activeNodeId !== null && relatedItems(activeNodeId).includes(item.id);\n            const ItemIcon = item.icon;\n            const nodeStyle: OrbitStyle = { transform: `translate(-50%, -50%) translate(${position.x}px, ${position.y}px)`, zIndex: isExpanded ? 200 : position.zIndex, opacity: isExpanded ? 1 : position.opacity };\n            return (\n              <div className=\"stepkit-orbital-timeline__node\" key={item.id} style={nodeStyle}>\n                <span aria-hidden=\"true\" className={`stepkit-orbital-timeline__pulse${pulseEffect[item.id] ? \" is-active\" : \"\"}`} style={{ width: `${item.energy * 0.5 + 40}px`, height: `${item.energy * 0.5 + 40}px` }} />\n                <button aria-expanded={isExpanded} aria-label={`${item.title} timeline item`} className={`stepkit-orbital-timeline__node-button${isRelated ? \" is-related\" : \"\"}${isExpanded ? \" is-expanded\" : \"\"}`} type=\"button\" onClick={(event) => { event.stopPropagation(); toggleItem(item.id); }}>\n                  {ItemIcon ? <ItemIcon aria-hidden={true} size={16} /> : <FallbackIcon category={item.category} />}\n                </button>\n                <span className=\"stepkit-orbital-timeline__label\">{item.title}</span>\n                {isExpanded && (\n                  <article aria-label={`${item.title} details`} className=\"stepkit-orbital-timeline__details\">\n                    <div className=\"stepkit-orbital-timeline__details-meta\"><span data-status={item.status}>{statusLabel(item.status)}</span><time>{item.date}</time></div>\n                    <h3>{item.title}</h3><p>{item.content}</p>\n                    <div className=\"stepkit-orbital-timeline__energy\"><span><b>Energy level</b><strong>{item.energy}%</strong></span><meter min=\"0\" max=\"100\" value={item.energy}>{item.energy}%</meter></div>\n                    {item.relatedIds.length > 0 && <div className=\"stepkit-orbital-timeline__related\"><span>Connected nodes</span><div>{item.relatedIds.map((relatedId) => { const related = timelineData.find((candidate) => candidate.id === relatedId); return <button key={relatedId} type=\"button\" onClick={(event) => { event.stopPropagation(); toggleItem(relatedId); }}>{related?.title ?? `Node ${relatedId}`} <span aria-hidden=\"true\">→</span></button>; })}</div></div>}\n                  </article>\n                )}\n              </div>\n            );\n          })}\n        </div>\n      </div>\n    </section>\n  );\n}\n\nexport default OrbitalTimeline;\n",
      "type": "registry:component",
      "target": "components/stepkit/OrbitalTimeline.tsx"
    },
    {
      "path": "components/stepkit/adapted-showcase.css",
      "content": "/*\n * Stepkit 0.3.0\n * Copyright (c) 2026 Vladislav Stepanov\n *\n * Original Stepkit portions in this release are licensed under the MIT License. Adapted portions identify their upstream licence and attribution in the copied source and in the entry-specific upstream notice files.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n/* Stepkit-specific presentation for the verified MIT adaptations. */\n.stepkit-background-paths { background: var(--stepkit-surface, #fff); border: 1px solid var(--stepkit-border, #e3e4e9); border-radius: var(--stepkit-card-radius, var(--stepkit-radius, 16px)); min-height: 430px; overflow: hidden; position: relative; }\n.stepkit-background-paths__field { inset: 0; opacity: .9; overflow: hidden; position: absolute; }\n.stepkit-background-paths__svg { height: 100%; inset: 0; position: absolute; width: 100%; }\n.stepkit-background-paths__group { transform-origin: center; }\n.stepkit-background-paths__path { animation: stepkit-background-path-drift var(--stepkit-path-duration, 8s) ease-in-out infinite alternate; animation-delay: var(--stepkit-path-delay, 0s); stroke-width: var(--stepkit-path-width, 2); vector-effect: non-scaling-stroke; }\n.stepkit-background-paths[data-paused=\"true\"] .stepkit-background-paths__path, .stepkit-background-paths[data-reduced-motion=\"true\"] .stepkit-background-paths__path { animation: none; }\n.stepkit-background-paths__path--secondary { --stepkit-path-opacity: .72; }\n.stepkit-background-paths__path--accent { --stepkit-path-opacity: .55; }\n.stepkit-background-paths__content { max-width: 34rem; padding: clamp(56px, 10vw, 112px) clamp(24px, 8vw, 90px); position: relative; z-index: 1; }\n.stepkit-background-paths__eyebrow, .stepkit-orbital-timeline__header > span { color: var(--stepkit-accent-on-soft, #5137c7); font-size: 11px; font-weight: 800; letter-spacing: .14em; text-transform: uppercase; }\n.stepkit-background-paths__title { font-size: clamp(30px, 6vw, 64px); letter-spacing: -.07em; line-height: .98; margin: 14px 0 0; max-width: 10ch; }\n.stepkit-background-paths__description { color: var(--stepkit-muted, #626572); font-size: 15px; line-height: 1.45; margin: 20px 0 0; max-width: 34ch; }\n\n.stepkit-orbital-timeline { background: var(--stepkit-bg, #f7f7f8); border: 1px solid var(--stepkit-border, #e3e4e9); border-radius: var(--stepkit-card-radius, var(--stepkit-radius, 16px)); min-height: 680px; overflow: hidden; position: relative; }\n.stepkit-orbital-timeline__header { padding: 26px clamp(22px, 5vw, 48px) 0; position: relative; z-index: 2; }\n.stepkit-orbital-timeline__header h2 { font-size: clamp(24px, 4vw, 42px); letter-spacing: -.06em; line-height: 1; margin: 10px 0 0; }\n.stepkit-orbital-timeline__header p { color: var(--stepkit-muted, #626572); margin: 10px 0 0; max-width: 42ch; }\n.stepkit-orbital-timeline__stage { min-height: 560px; overflow: visible; position: relative; }\n.stepkit-orbital-timeline__orbit { height: min(78vw, 500px); left: 50%; max-height: 500px; max-width: 500px; position: absolute; top: 52%; transform: translate(-50%, -50%); width: min(78vw, 500px); }\n.stepkit-orbital-timeline__ring { border: 1px solid color-mix(in srgb, var(--stepkit-accent, #6950df) 30%, var(--stepkit-border, #e3e4e9)); border-radius: 50%; inset: 50px; position: absolute; }\n.stepkit-orbital-timeline__ring::after { border: 1px dashed color-mix(in srgb, var(--stepkit-accent, #6950df) 18%, transparent); border-radius: 50%; content: \"\"; inset: 22px; position: absolute; }\n.stepkit-orbital-timeline__center { align-items: center; background: var(--stepkit-accent, #6950df); border: 5px solid var(--stepkit-surface, #fff); border-radius: 50%; box-shadow: 0 0 0 1px var(--stepkit-accent, #6950df), 0 0 44px color-mix(in srgb, var(--stepkit-accent, #6950df) 30%, transparent); display: flex; height: 64px; justify-content: center; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); width: 64px; z-index: 10; }\n.stepkit-orbital-timeline__fallback-icon { height: 18px; width: 18px; }\n.stepkit-orbital-timeline__center span { background: var(--stepkit-accent-text, #fff); border-radius: 50%; height: 18px; opacity: .85; width: 18px; }\n.stepkit-orbital-timeline__center i { border: 1px solid color-mix(in srgb, var(--stepkit-accent-text, #fff) 55%, transparent); border-radius: 50%; height: 80px; position: absolute; width: 80px; }\n.stepkit-orbital-timeline__center i:last-child { height: 104px; opacity: .55; width: 104px; }\n.stepkit-orbital-timeline__node { left: 50%; position: absolute; top: 50%; transition: opacity 240ms ease, transform 700ms cubic-bezier(.2,.8,.2,1); }\n.stepkit-orbital-timeline__node-button { align-items: center; background: var(--stepkit-fg, #17181c); border: 2px solid color-mix(in srgb, var(--stepkit-fg, #17181c) 50%, var(--stepkit-border-strong, #c8cad3)); border-radius: 50%; color: var(--stepkit-surface, #fff); display: flex; height: 42px; justify-content: center; padding: 0; transition: background-color 180ms ease, border-color 180ms ease, box-shadow 180ms ease, transform 180ms ease; width: 42px; }\n.stepkit-orbital-timeline__node-button:hover, .stepkit-orbital-timeline__node-button:focus-visible, .stepkit-orbital-timeline__node-button.is-expanded { background: var(--stepkit-accent, #6950df); border-color: var(--stepkit-accent, #6950df); box-shadow: 0 0 0 6px var(--stepkit-accent-soft, #eeeafd); transform: scale(1.2); }\n.stepkit-orbital-timeline__node-button.is-related { border-color: var(--stepkit-accent, #6950df); }\n.stepkit-orbital-timeline__pulse { border-radius: 50%; inset: 50% auto auto 50%; pointer-events: none; position: absolute; transform: translate(-50%, -50%); background: radial-gradient(circle, color-mix(in srgb, var(--stepkit-accent, #6950df) 20%, transparent), transparent 70%); opacity: 0; transition: opacity 180ms ease; }\n.stepkit-orbital-timeline__pulse.is-active { animation: stepkit-orbital-pulse 1.2s ease-in-out infinite; opacity: 1; }\n.stepkit-orbital-timeline__label { color: var(--stepkit-muted, #626572); display: block; font-size: 11px; font-weight: 750; left: 50%; max-width: 12ch; overflow-wrap: normal; position: absolute; text-align: center; top: 50px; transform: translateX(-50%); width: 10ch; word-break: normal; }\n.stepkit-orbital-timeline__details { background: var(--stepkit-surface, #fff); border: 1px solid var(--stepkit-border, #e3e4e9); border-radius: var(--stepkit-radius, 16px); box-shadow: var(--stepkit-shadow, 0 20px 60px rgba(31, 26, 64, .1)); color: var(--stepkit-fg, #17181c); left: 50%; padding: 17px; position: absolute; top: 72px; transform: translateX(-50%); width: min(300px, 74vw); }\n.stepkit-orbital-timeline__details::before { background: var(--stepkit-border, #e3e4e9); content: \"\"; height: 14px; left: 50%; position: absolute; top: -14px; width: 1px; }\n.stepkit-orbital-timeline__details-meta, .stepkit-orbital-timeline__energy > span { align-items: center; display: flex; gap: 8px; justify-content: space-between; }\n.stepkit-orbital-timeline__details-meta > span { background: var(--stepkit-accent-soft, #eeeafd); border-radius: 999px; color: var(--stepkit-accent-on-soft, #5137c7); font-size: 10px; font-weight: 800; padding: 5px 8px; }\n.stepkit-orbital-timeline__details-meta > span[data-status=\"pending\"] { background: var(--stepkit-surface-muted, #f0f0f3); color: var(--stepkit-muted, #626572); }\n.stepkit-orbital-timeline__details-meta time { color: var(--stepkit-muted, #626572); font-size: 11px; }\n.stepkit-orbital-timeline__details h3 { font-size: 18px; margin: 14px 0 6px; }\n.stepkit-orbital-timeline__details p { color: var(--stepkit-muted, #626572); font-size: 13px; margin: 0; }\n.stepkit-orbital-timeline__energy { border-top: 1px solid var(--stepkit-border, #e3e4e9); margin-top: 15px; padding-top: 13px; }\n.stepkit-orbital-timeline__energy b, .stepkit-orbital-timeline__related > span { font-size: 11px; font-weight: 800; }\n.stepkit-orbital-timeline__energy strong { font-size: 12px; }\n.stepkit-orbital-timeline__energy meter { display: block; height: 6px; margin-top: 7px; width: 100%; }\n.stepkit-orbital-timeline__related { border-top: 1px solid var(--stepkit-border, #e3e4e9); margin-top: 14px; padding-top: 12px; }\n.stepkit-orbital-timeline__related > div { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }\n.stepkit-orbital-timeline__related button { background: transparent; border: 1px solid var(--stepkit-border-strong, #c8cad3); border-radius: 999px; color: var(--stepkit-fg, #17181c); font-size: 11px; min-height: 30px; padding: 5px 9px; }\n.stepkit-orbital-timeline__related button:hover, .stepkit-orbital-timeline__related button:focus-visible { border-color: var(--stepkit-accent, #6950df); color: var(--stepkit-accent-on-soft, #5137c7); }\n.stepkit-orbital-timeline[data-paused=\"true\"] .stepkit-orbital-timeline__node, .stepkit-orbital-timeline[data-reduced-motion=\"true\"] .stepkit-orbital-timeline__node { transition: none; }\n.stepkit-orbital-timeline[data-paused=\"true\"] .stepkit-orbital-timeline__pulse, .stepkit-orbital-timeline[data-reduced-motion=\"true\"] .stepkit-orbital-timeline__pulse { animation: none; opacity: 0; }\n@keyframes stepkit-background-path-drift { from { transform: translateY(0); } to { transform: translateY(-12px); } }\n@keyframes stepkit-orbital-pulse { 0%, 100% { transform: translate(-50%, -50%) scale(.84); } 50% { transform: translate(-50%, -50%) scale(1.08); } }\n@media (max-width: 620px) { .stepkit-orbital-timeline__orbit { top: 54%; } .stepkit-orbital-timeline__ring { inset: 30px; } .stepkit-orbital-timeline__header { padding-inline: 20px; } }\n@media (prefers-reduced-motion: reduce) { .stepkit-background-paths__path, .stepkit-orbital-timeline__pulse.is-active { animation: none; } .stepkit-orbital-timeline__node, .stepkit-orbital-timeline__node-button { transition: none; } }\n",
      "type": "registry:style",
      "target": "components/stepkit/adapted-showcase.css"
    },
    {
      "path": "components/stepkit/styles.css",
      "content": "/*\n * Stepkit 0.3.0\n * Copyright (c) 2026 Vladislav Stepanov\n *\n * Original Stepkit portions in this release are licensed under the MIT License. Adapted portions identify their upstream licence and attribution in the copied source and in the entry-specific upstream notice files.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n/* Stepkit components inherit tokens from .stepkit-theme or a consumer wrapper. */\n.stepkit-theme { background: var(--stepkit-bg, #f7f7f8); color: var(--stepkit-fg, #17181c); font-family: var(--stepkit-font-sans, Inter, ui-sans-serif, system-ui, sans-serif); }\n.stepkit,\n.stepkit * { box-sizing: border-box; }\n\n.stepkit {\n  color: var(--stepkit-fg, #17181c);\n  font-family: var(--stepkit-font-sans, Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif);\n  font-size: 16px;\n  line-height: 1.5;\n  min-width: 0;\n}\n.stepkit :where(button, input, textarea, select) { color: inherit; font: inherit; }\n.stepkit:where(button, a, input, textarea, select, [tabindex=\"0\"]):focus-visible, .stepkit :where(button, a, input, textarea, select, [tabindex=\"0\"]):focus-visible { outline: 3px solid var(--stepkit-accent, #6950df); outline-offset: 3px; }\n.stepkit :where(a) { color: inherit; }\n.stepkit :where(p, h1, h2, h3, h4, ul, ol) { overflow-wrap: anywhere; }\n.stepkit :where(p) { white-space: pre-wrap; }\n.stepkit :where(button) { cursor: pointer; }\n.stepkit :where(button:disabled, input:disabled, textarea:disabled) { cursor: not-allowed; opacity: .58; }\n\n.stepkit-button { align-items: center; background: var(--stepkit-accent, #6950df); border: 1px solid var(--stepkit-accent, #6950df); border-radius: var(--stepkit-radius, 16px); color: var(--stepkit-accent-text, #fff); display: inline-flex; font-size: 14px; font-weight: 700; gap: 8px; justify-content: center; min-height: var(--stepkit-control-height, 44px); padding: 10px 17px; text-decoration: none; transition: background-color 160ms ease, border-color 160ms ease, box-shadow 160ms ease, transform 160ms ease; }\n.stepkit-button:hover:not(:disabled) { background: var(--stepkit-accent-strong, #5137c7); border-color: var(--stepkit-accent-strong, #5137c7); transform: translateY(-1px); }\n.stepkit-button:active:not(:disabled) { transform: translateY(0); }\n.stepkit-button[data-size=\"sm\"] { min-height: 44px; padding: 8px 13px; }\n.stepkit-button[data-size=\"lg\"] { min-height: 50px; padding: 13px 22px; }\n.stepkit-button[data-variant=\"outline\"] { background: transparent; border-color: var(--stepkit-border-strong, #c8cad3); color: var(--stepkit-fg, #17181c); }\n.stepkit-button[data-variant=\"outline\"]:hover:not(:disabled) { background: var(--stepkit-accent-soft, #eeeafd); border-color: var(--stepkit-accent, #6950df); color: var(--stepkit-accent-on-soft, #5137c7); }\n.stepkit-button[data-variant=\"ghost\"], .stepkit-button[data-variant=\"soft\"] { background: var(--stepkit-accent-soft, #eeeafd); border-color: transparent; color: var(--stepkit-accent-on-soft, #5137c7); }\n.stepkit-button[data-variant=\"ghost\"]:hover:not(:disabled), .stepkit-button[data-variant=\"soft\"]:hover:not(:disabled) { background: color-mix(in srgb, var(--stepkit-accent-soft, #eeeafd) 76%, var(--stepkit-accent, #6950df)); }\n.stepkit-button[data-variant=\"danger\"] { background: #c43d50; border-color: #c43d50; color: #fff; }\n.stepkit-button[data-variant=\"danger\"]:hover:not(:disabled) { background: #a92d40; border-color: #a92d40; }\n.stepkit-button__spinner { animation: stepkit-spin 700ms linear infinite; border: 2px solid currentColor; border-right-color: transparent; border-radius: 50%; height: 15px; width: 15px; }\n\n.stepkit-card { background: var(--stepkit-surface, #fff); border: 1px solid var(--stepkit-border, #e3e4e9); border-radius: var(--stepkit-card-radius, var(--stepkit-radius, 16px)); box-shadow: 0 8px 24px color-mix(in srgb, var(--stepkit-fg, #17181c) 5%, transparent); color: var(--stepkit-fg, #17181c); padding: clamp(18px, 3vw, 28px); }\n.stepkit-card__eyebrow { color: var(--stepkit-accent-on-soft, #5137c7); font-size: 12px; font-weight: 800; letter-spacing: .08em; margin: 0 0 10px; text-transform: uppercase; }\n.stepkit-card__title { font-size: 20px; letter-spacing: -.03em; line-height: 1.2; margin: 0 0 8px; }\n.stepkit-card__body { color: var(--stepkit-muted, #626572); margin: 0; }\n.stepkit-card__footer { align-items: center; border-top: 1px solid var(--stepkit-border, #e3e4e9); display: flex; gap: 12px; justify-content: space-between; margin-top: 22px; padding-top: 16px; }\n\n.stepkit-badge { align-items: center; border-radius: 999px; display: inline-flex; font-size: 12px; font-weight: 750; gap: 7px; line-height: 1; min-height: 28px; padding: 6px 10px; }\n.stepkit-badge[data-size=\"sm\"] { font-size: 11px; min-height: 24px; padding: 5px 8px; }\n.stepkit-badge__dot { background: currentColor; border-radius: 50%; height: 7px; width: 7px; }\n.stepkit-badge[data-tone=\"neutral\"] { background: var(--stepkit-surface-muted, #f0f0f3); color: var(--stepkit-muted, #626572); }\n.stepkit-badge[data-tone=\"accent\"], .stepkit-badge[data-tone=\"info\"] { background: var(--stepkit-accent-soft, #eeeafd); color: var(--stepkit-accent-on-soft, #5137c7); }\n.stepkit-badge[data-tone=\"success\"] { background: #e4f7ef; color: #087452; }\n.stepkit-badge[data-tone=\"warning\"] { background: #fff1dc; color: #9b5b08; }\n.stepkit-badge[data-tone=\"danger\"] { background: #ffe6ea; color: #a52e42; }\n\n.stepkit-field { display: grid; gap: 8px; width: 100%; }\n.stepkit-field__label { color: var(--stepkit-fg, #17181c); font-size: 14px; font-weight: 700; }\n.stepkit-field__hint { color: var(--stepkit-muted, #626572); font-size: 13px; margin: 0; }\n.stepkit-field__error { color: var(--stepkit-error, #b43145); font-size: 13px; margin: 0; }\n.stepkit-input, .stepkit-textarea { background: var(--stepkit-surface, #fff); border: 1px solid var(--stepkit-border-strong, #c8cad3); border-radius: var(--stepkit-radius, 16px); color: var(--stepkit-fg, #17181c); min-height: var(--stepkit-control-height, 44px); padding: 10px 13px; transition: border-color 160ms ease, box-shadow 160ms ease; width: 100%; }\n.stepkit-textarea { min-height: 116px; resize: vertical; }\n.stepkit-input::placeholder, .stepkit-textarea::placeholder { color: var(--stepkit-placeholder, #626572); opacity: 1; }\n.stepkit-input:hover, .stepkit-textarea:hover { border-color: var(--stepkit-accent, #6950df); }\n.stepkit-input:focus, .stepkit-textarea:focus { border-color: var(--stepkit-accent, #6950df); box-shadow: 0 0 0 4px var(--stepkit-accent-soft, #eeeafd); outline: none; }\n.stepkit-field[data-invalid=\"true\"] .stepkit-input, .stepkit-field[data-invalid=\"true\"] .stepkit-textarea { border-color: #c43d50; }\n.stepkit-field__control { position: relative; }\n.stepkit-field__adornment { align-items: center; color: var(--stepkit-muted, #626572); display: flex; inset: 0 auto 0 13px; pointer-events: none; position: absolute; }\n.stepkit-field__adornment--end { inset: 0 13px 0 auto; }\n.stepkit-field__control:has(.stepkit-field__adornment) .stepkit-input { padding-left: 40px; }\n.stepkit-field__control:has(.stepkit-field__adornment--end) .stepkit-input { padding-right: 40px; }\n\n.stepkit-check, .stepkit-switch { align-items: flex-start; display: flex; gap: 12px; }\n.stepkit-check__box { appearance: none; background: var(--stepkit-surface, #fff); border: 1px solid var(--stepkit-border-strong, #c8cad3); border-radius: 6px; flex: 0 0 20px; height: 20px; margin: 2px 0 0; position: relative; width: 20px; }\n.stepkit-check__box:checked { background: var(--stepkit-accent, #6950df); border-color: var(--stepkit-accent, #6950df); }\n.stepkit-check__box:checked::after { border: solid #fff; border-width: 0 2px 2px 0; content: \"\"; height: 10px; left: 6px; position: absolute; top: 2px; transform: rotate(45deg); width: 5px; }\n.stepkit-check__copy, .stepkit-switch__copy { display: grid; gap: 3px; }\n.stepkit-check__label, .stepkit-switch__label { color: var(--stepkit-fg, #17181c); font-size: 14px; font-weight: 700; }\n.stepkit-check__description, .stepkit-switch__description { color: var(--stepkit-muted, #626572); font-size: 13px; margin: 0; }\n.stepkit-switch__input { appearance: none; background: var(--stepkit-border-strong, #c8cad3); border: 0; border-radius: 999px; flex: 0 0 44px; height: 24px; margin: 1px 0 0; padding: 3px; transition: background-color 160ms ease; width: 44px; }\n.stepkit-switch__input::before { background: #fff; border-radius: 50%; content: \"\"; display: block; height: 18px; transition: transform 160ms ease; width: 18px; }\n.stepkit-switch__input:checked { background: var(--stepkit-accent, #6950df); }\n.stepkit-switch__input:checked::before { transform: translateX(20px); }\n\n.stepkit-tabs { display: grid; gap: 18px; }\n.stepkit-tabs__list { border-bottom: 1px solid var(--stepkit-border, #e3e4e9); display: flex; flex-wrap: wrap; gap: 4px; }\n.stepkit-tabs__trigger { background: transparent; border: 0; border-bottom: 2px solid transparent; color: var(--stepkit-muted, #626572); min-height: 44px; padding: 9px 13px; }\n.stepkit-tabs__trigger[aria-selected=\"true\"] { border-bottom-color: var(--stepkit-accent, #6950df); color: var(--stepkit-accent-on-soft, #5137c7); font-weight: 750; }\n.stepkit-tabs__panel { animation: stepkit-fade-in 180ms ease both; color: var(--stepkit-muted, #626572); min-height: 60px; }\n\n.stepkit-modal-trigger { margin: 0; }\n.stepkit-modal-panel { background: var(--stepkit-surface, #fff); border: 1px solid var(--stepkit-border, #e3e4e9); border-radius: var(--stepkit-radius, 16px); box-shadow: var(--stepkit-shadow, 0 20px 60px rgba(31, 26, 64, .1)); color: var(--stepkit-fg, #17181c); max-height: min(82vh, 680px); max-width: min(520px, calc(100% - 28px)); overflow: auto; padding: clamp(22px, 5vw, 34px); width: 100%; }\n.stepkit-modal-panel::backdrop { background: color-mix(in srgb, var(--stepkit-fg, #17181c) 32%, transparent); }\n.stepkit-modal-title { font-size: 24px; letter-spacing: -.04em; line-height: 1.15; margin: 0 0 10px; }\n.stepkit-modal-body { color: var(--stepkit-muted, #626572); margin: 0 0 24px; }\n.stepkit-modal-actions { display: flex; flex-wrap: wrap; gap: 10px; justify-content: flex-end; margin-top: 24px; }\n\n.stepkit-tooltip { display: inline-flex; position: relative; }\n.stepkit-tooltip__content { background: var(--stepkit-fg, #17181c); border-radius: 8px; bottom: calc(100% + 10px); color: var(--stepkit-surface, #fff); font-size: 12px; left: 50%; max-width: min(260px, 80vw); opacity: 0; padding: 8px 10px; pointer-events: none; position: absolute; transform: translate(-50%, 4px); transition: opacity 140ms ease, transform 140ms ease; width: max-content; z-index: 4; }\n.stepkit-tooltip__content::after { border: 5px solid transparent; border-top-color: var(--stepkit-fg, #17181c); content: \"\"; left: 50%; position: absolute; top: 100%; transform: translateX(-50%); }\n.stepkit-tooltip[data-open=\"true\"] .stepkit-tooltip__content { opacity: 1; pointer-events: auto; transform: translate(-50%, 0); }\n\n.stepkit-navbar { align-items: center; display: flex; gap: 24px; justify-content: space-between; min-height: 64px; width: 100%; }\n.stepkit-navbar__brand { align-items: center; color: var(--stepkit-fg, #17181c); display: inline-flex; font-size: 17px; font-weight: 800; letter-spacing: -.04em; min-height: 44px; text-decoration: none; }\n.stepkit-navbar__links { align-items: center; display: flex; flex-wrap: wrap; gap: 4px; justify-content: flex-end; }\n.stepkit-navbar__link { align-items: center; border-radius: 10px; color: var(--stepkit-muted, #626572); display: inline-flex; min-height: 44px; padding: 8px 11px; text-decoration: none; }\n.stepkit-navbar__link:hover, .stepkit-navbar__link:focus-visible { background: var(--stepkit-accent-soft, #eeeafd); color: var(--stepkit-accent-on-soft, #5137c7); }\n.stepkit-navbar[data-compact=\"true\"] { min-height: 48px; }\n@media (max-width: 560px) { .stepkit-navbar { align-items: flex-start; flex-direction: column; gap: 10px; } .stepkit-navbar__links { justify-content: flex-start; width: 100%; } }\n\n.stepkit-sidebar { background: var(--stepkit-surface, #fff); border: 1px solid var(--stepkit-border, #e3e4e9); border-radius: var(--stepkit-radius, 16px); display: flex; flex-direction: column; gap: 18px; min-width: 190px; padding: 16px; }\n.stepkit-sidebar__title { color: var(--stepkit-muted, #626572); font-size: 11px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase; }\n.stepkit-sidebar__items { display: grid; gap: 3px; }\n.stepkit-sidebar__item { align-items: center; background: transparent; border: 0; border-radius: 10px; color: var(--stepkit-muted, #626572); display: flex; font-size: 14px; gap: 9px; min-height: 42px; padding: 9px 10px; text-align: left; width: 100%; }\n.stepkit-sidebar__item:hover, .stepkit-sidebar__item[aria-current=\"page\"] { background: var(--stepkit-accent-soft, #eeeafd); color: var(--stepkit-accent-on-soft, #5137c7); }\n.stepkit-sidebar__item[aria-current=\"page\"] { font-weight: 750; }\n.stepkit-sidebar__footer { border-top: 1px solid var(--stepkit-border, #e3e4e9); color: var(--stepkit-muted, #626572); font-size: 12px; padding-top: 14px; }\n\n.stepkit-command { display: inline-flex; }\n.stepkit-command__dialog { background: var(--stepkit-surface, #fff); border: 1px solid var(--stepkit-border, #e3e4e9); border-radius: var(--stepkit-radius, 16px); box-shadow: var(--stepkit-shadow, 0 20px 60px rgba(31, 26, 64, .1)); color: var(--stepkit-fg, #17181c); max-width: min(600px, calc(100% - 24px)); padding: 10px; width: 100%; }\n.stepkit-command__dialog::backdrop { background: color-mix(in srgb, var(--stepkit-fg, #17181c) 30%, transparent); }\n.stepkit-command__input { background: transparent; border: 0; border-bottom: 1px solid var(--stepkit-border, #e3e4e9); border-radius: 0; min-height: 48px; outline: none; padding: 12px; width: 100%; }\n.stepkit-command__list { display: grid; gap: 3px; list-style: none; margin: 8px 0 0; max-height: 300px; overflow: auto; padding: 0; }\n.stepkit-command__item { align-items: center; background: transparent; border: 0; border-radius: 10px; display: flex; gap: 12px; justify-content: space-between; min-height: 44px; padding: 10px 12px; text-align: left; width: 100%; }\n.stepkit-command__item:hover, .stepkit-command__item[aria-selected=\"true\"] { background: var(--stepkit-accent-soft, #eeeafd); color: var(--stepkit-accent-on-soft, #5137c7); }\n.stepkit-command__shortcut { color: var(--stepkit-muted, #626572); font-size: 12px; }\n.stepkit-command__empty { color: var(--stepkit-muted, #626572); margin: 14px 12px; }\n\n.stepkit-accordion { border-top: 1px solid var(--stepkit-border, #e3e4e9); }\n.stepkit-accordion__item { border-bottom: 1px solid var(--stepkit-border, #e3e4e9); }\n.stepkit-accordion__trigger { align-items: center; background: transparent; border: 0; display: flex; font-size: 16px; font-weight: 750; gap: 14px; justify-content: space-between; min-height: 58px; padding: 14px 0; text-align: left; width: 100%; }\n.stepkit-accordion__icon { color: var(--stepkit-accent-on-soft, #5137c7); font-size: 22px; font-weight: 400; }\n.stepkit-accordion__panel { color: var(--stepkit-muted, #626572); max-width: 70ch; padding: 0 28px 20px 0; }\n\n.stepkit-empty-state { align-items: center; background: var(--stepkit-surface, #fff); border: 1px dashed var(--stepkit-border-strong, #c8cad3); border-radius: var(--stepkit-radius, 16px); display: flex; flex-direction: column; gap: 10px; justify-content: center; min-height: 240px; padding: 30px; text-align: center; }\n.stepkit-empty-state__icon { align-items: center; background: var(--stepkit-accent-soft, #eeeafd); border-radius: 14px; color: var(--stepkit-accent-on-soft, #5137c7); display: flex; font-size: 22px; height: 48px; justify-content: center; width: 48px; }\n.stepkit-empty-state__title { font-size: 20px; letter-spacing: -.03em; margin: 0; }\n.stepkit-empty-state__description { color: var(--stepkit-muted, #626572); margin: 0 0 8px; max-width: 42ch; }\n\n.stepkit-toast { align-items: flex-start; background: var(--stepkit-fg, #17181c); border-radius: var(--stepkit-radius, 16px); box-shadow: var(--stepkit-shadow, 0 20px 60px rgba(31, 26, 64, .1)); color: var(--stepkit-surface, #fff); display: flex; gap: 16px; justify-content: space-between; max-width: min(420px, 100%); padding: 16px 18px; }\n.stepkit-toast__copy { display: grid; gap: 3px; }\n.stepkit-toast__title { font-weight: 800; }\n.stepkit-toast__message { color: color-mix(in srgb, var(--stepkit-surface, #fff) 72%, transparent); font-size: 14px; margin: 0; }\n.stepkit-toast__close { background: transparent; border: 0; border-radius: 8px; color: inherit; min-height: 36px; min-width: 36px; }\n.stepkit-toast__close:hover { background: color-mix(in srgb, var(--stepkit-surface, #fff) 16%, transparent); }\n\n.stepkit-border-highlight { background: var(--stepkit-surface, #fff); border: 1px solid var(--stepkit-border, #e3e4e9); border-radius: var(--stepkit-radius, 16px); color: var(--stepkit-fg, #17181c); display: block; padding: 24px; text-decoration: none; transition: border-color 180ms ease, box-shadow 180ms ease, transform 180ms ease; }\n.stepkit-border-highlight:hover, .stepkit-border-highlight:focus-visible { border-color: var(--stepkit-accent, #6950df); box-shadow: 0 0 0 4px var(--stepkit-accent-soft, #eeeafd); transform: translateY(-2px); }\n.stepkit-border-highlight[data-intensity=\"strong\"] { border-color: var(--stepkit-accent, #6950df); }\n.stepkit-border-highlight[data-paused=\"true\"] { transition: none; }\n.stepkit-border-highlight__title { display: block; font-size: 18px; font-weight: 800; }\n.stepkit-border-highlight__hint { color: var(--stepkit-muted, #626572); display: block; font-size: 13px; margin-top: 5px; }\n\n.stepkit-pointer-tilt { perspective: 900px; }\n.stepkit-pointer-tilt__surface { background: var(--stepkit-surface, #fff); border: 1px solid var(--stepkit-border, #e3e4e9); border-radius: var(--stepkit-radius, 16px); box-shadow: var(--stepkit-shadow, 0 20px 60px rgba(31, 26, 64, .1)); padding: clamp(24px, 5vw, 50px); transform: rotateX(var(--stepkit-tilt-y, 0deg)) rotateY(var(--stepkit-tilt-x, 0deg)); transition: transform 180ms ease; }\n.stepkit-pointer-tilt__surface h3 { font-size: clamp(24px, 4vw, 42px); letter-spacing: -.06em; line-height: 1; margin: 0 0 12px; }\n.stepkit-pointer-tilt__surface p { color: var(--stepkit-muted, #626572); margin: 0; }\n.stepkit-pointer-tilt[data-paused=\"true\"] .stepkit-pointer-tilt__surface { transition: none; transform: none; }\n\n.stepkit-text-reveal { display: inline; }\n.stepkit-text-reveal__word { animation: stepkit-reveal 520ms cubic-bezier(.2,.8,.2,1) forwards; animation-delay: calc(var(--stepkit-index) * 55ms); display: inline-block; margin-right: .23em; opacity: 0; transform: translateY(.45em); }\n.stepkit-text-reveal[data-paused=\"true\"] .stepkit-text-reveal__word { animation: none; opacity: 1; transform: none; }\n\n.stepkit-spotlight-panel { background: radial-gradient(circle at var(--stepkit-spotlight-x, 50%) var(--stepkit-spotlight-y, 50%), color-mix(in srgb, var(--stepkit-accent, #6950df) 25%, transparent), transparent 34%), var(--stepkit-surface, #fff); border: 1px solid var(--stepkit-border, #e3e4e9); border-radius: var(--stepkit-radius, 16px); min-height: 260px; overflow: hidden; padding: clamp(24px, 5vw, 54px); position: relative; }\n.stepkit-spotlight-panel::after { background: linear-gradient(135deg, color-mix(in srgb, var(--stepkit-accent, #6950df) 12%, transparent), transparent 48%); content: \"\"; inset: 0; pointer-events: none; position: absolute; }\n.stepkit-spotlight-panel__content { max-width: 34rem; position: relative; z-index: 1; }\n.stepkit-spotlight-panel__eyebrow { color: var(--stepkit-accent-on-soft, #5137c7); font-size: 12px; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; }\n.stepkit-spotlight-panel h3 { font-size: clamp(26px, 5vw, 52px); letter-spacing: -.07em; line-height: .98; margin: 14px 0; }\n.stepkit-spotlight-panel p { color: var(--stepkit-muted, #626572); margin: 0; max-width: 46ch; }\n\n.stepkit-gradient-wash { background: linear-gradient(135deg, color-mix(in srgb, var(--stepkit-accent, #6950df) 19%, var(--stepkit-bg, #f7f7f8)), var(--stepkit-surface, #fff) 52%, color-mix(in srgb, var(--stepkit-accent-soft, #eeeafd) 68%, var(--stepkit-surface, #fff))); border: 1px solid var(--stepkit-border, #e3e4e9); border-radius: var(--stepkit-radius, 16px); min-height: 260px; overflow: hidden; padding: clamp(26px, 5vw, 58px); position: relative; }\n.stepkit-gradient-wash::before, .stepkit-gradient-wash::after { border: 1px solid color-mix(in srgb, var(--stepkit-accent, #6950df) 30%, transparent); border-radius: 50%; content: \"\"; height: 240px; position: absolute; right: -50px; top: -80px; transform: rotate(-20deg); width: 240px; }\n.stepkit-gradient-wash::after { bottom: -80px; height: 150px; right: 110px; top: auto; width: 150px; }\n.stepkit-gradient-wash__content { max-width: 36rem; position: relative; z-index: 1; }\n.stepkit-gradient-wash h3 { font-size: clamp(28px, 5vw, 54px); letter-spacing: -.07em; line-height: .98; margin: 0 0 14px; }\n.stepkit-gradient-wash p { color: var(--stepkit-muted, #626572); margin: 0; max-width: 45ch; }\n\n.stepkit-staggered-grid { display: grid; gap: var(--stepkit-space, 16px); grid-template-columns: repeat(3, minmax(0, 1fr)); }\n.stepkit-staggered-grid__item { animation: stepkit-rise 500ms cubic-bezier(.2,.8,.2,1) both; animation-delay: calc(var(--stepkit-index) * 70ms); background: var(--stepkit-surface, #fff); border: 1px solid var(--stepkit-border, #e3e4e9); border-radius: var(--stepkit-radius, 16px); min-height: 150px; padding: 20px; }\n.stepkit-staggered-grid__number { color: var(--stepkit-accent-on-soft, #5137c7); font-size: 13px; font-weight: 800; }\n.stepkit-staggered-grid__title { font-size: 18px; font-weight: 800; margin: 28px 0 5px; }\n.stepkit-staggered-grid__body { color: var(--stepkit-muted, #626572); font-size: 14px; margin: 0; }\n.stepkit-staggered-grid[data-paused=\"true\"] .stepkit-staggered-grid__item { animation: none; }\n@media (max-width: 640px) { .stepkit-staggered-grid { grid-template-columns: 1fr; } }\n\n.stepkit-expandable-card { background: var(--stepkit-surface, #fff); border: 1px solid var(--stepkit-border, #e3e4e9); border-radius: var(--stepkit-radius, 16px); overflow: hidden; }\n.stepkit-expandable-card__trigger { align-items: center; background: transparent; border: 0; display: flex; gap: 14px; justify-content: space-between; min-height: 72px; padding: 18px 20px; text-align: left; width: 100%; }\n.stepkit-expandable-card__title { font-size: 18px; font-weight: 800; }\n.stepkit-expandable-card__icon { color: var(--stepkit-accent-on-soft, #5137c7); font-size: 24px; }\n.stepkit-expandable-card__body { border-top: 1px solid var(--stepkit-border, #e3e4e9); color: var(--stepkit-muted, #626572); padding: 18px 20px 22px; }\n\n.stepkit-hero { background: linear-gradient(135deg, var(--stepkit-surface, #fff), var(--stepkit-accent-soft, #eeeafd)); border: 1px solid var(--stepkit-border, #e3e4e9); border-radius: calc(var(--stepkit-radius, 16px) + 6px); display: grid; gap: 20px; overflow: hidden; padding: clamp(32px, 7vw, 84px); position: relative; }\n.stepkit-hero::after { background: radial-gradient(circle, color-mix(in srgb, var(--stepkit-accent, #6950df) 38%, transparent), transparent 68%); content: \"\"; height: 400px; opacity: .42; position: absolute; right: -160px; top: -160px; width: 400px; }\n.stepkit-hero__content { max-width: 660px; position: relative; z-index: 1; }\n.stepkit-hero__eyebrow { color: var(--stepkit-accent-on-soft, #5137c7); font-size: 12px; font-weight: 850; letter-spacing: .14em; text-transform: uppercase; }\n.stepkit-hero__headline { font-size: clamp(38px, 7vw, 78px); letter-spacing: -.08em; line-height: .96; margin: 12px 0 18px; max-width: 10ch; }\n.stepkit-hero__body { color: var(--stepkit-muted, #626572); font-size: clamp(16px, 2vw, 20px); margin: 0; max-width: 48ch; }\n.stepkit-hero__actions { align-items: center; display: flex; flex-wrap: wrap; gap: 10px; margin-top: 10px; }\n.stepkit-hero__visual { min-height: 170px; position: relative; z-index: 1; }\n.stepkit-hero__orb { background: linear-gradient(135deg, var(--stepkit-accent, #6950df), color-mix(in srgb, var(--stepkit-accent, #6950df) 42%, #fff)); border-radius: 42% 58% 55% 45%; box-shadow: 0 30px 80px color-mix(in srgb, var(--stepkit-accent, #6950df) 32%, transparent); height: clamp(130px, 25vw, 240px); margin-left: auto; transform: rotate(-15deg); width: clamp(130px, 25vw, 240px); }\n\n.stepkit-feature-bento { display: grid; gap: var(--stepkit-space, 16px); grid-template-columns: repeat(4, minmax(0, 1fr)); }\n.stepkit-feature-bento__item { background: var(--stepkit-surface, #fff); border: 1px solid var(--stepkit-border, #e3e4e9); border-radius: var(--stepkit-radius, 16px); min-height: 180px; overflow: hidden; padding: clamp(18px, 3vw, 28px); position: relative; }\n.stepkit-feature-bento__item:nth-child(1) { grid-column: span 2; grid-row: span 2; min-height: 380px; }\n.stepkit-feature-bento__item:nth-child(2) { grid-column: span 2; }\n.stepkit-feature-bento__item:nth-child(3), .stepkit-feature-bento__item:nth-child(4) { grid-column: span 1; }\n.stepkit-feature-bento__glow { background: radial-gradient(circle, color-mix(in srgb, var(--stepkit-accent, #6950df) 55%, transparent), transparent 70%); height: 260px; opacity: .7; position: absolute; right: -80px; top: -70px; width: 260px; }\n.stepkit-feature-bento__title { font-size: 21px; letter-spacing: -.04em; margin: 0 0 8px; position: relative; }\n.stepkit-feature-bento__body { color: var(--stepkit-muted, #626572); margin: 0; max-width: 34ch; position: relative; }\n.stepkit-feature-bento__metric { bottom: 22px; color: var(--stepkit-accent, #6950df); font-size: clamp(38px, 7vw, 72px); font-weight: 850; letter-spacing: -.09em; line-height: 1; position: absolute; right: 22px; }\n@media (max-width: 760px) { .stepkit-feature-bento { grid-template-columns: repeat(2, minmax(0, 1fr)); } .stepkit-feature-bento__item:nth-child(1), .stepkit-feature-bento__item:nth-child(2), .stepkit-feature-bento__item:nth-child(3), .stepkit-feature-bento__item:nth-child(4) { grid-column: span 2; grid-row: auto; min-height: 180px; } }\n\n.stepkit-pricing-comparison { display: grid; gap: var(--stepkit-space, 16px); grid-template-columns: repeat(3, minmax(0, 1fr)); }\n.stepkit-pricing-comparison > .stepkit-card__eyebrow { grid-column: 1 / -1; margin: 0; }\n.stepkit-pricing-comparison__plan { background: var(--stepkit-surface, #fff); border: 1px solid var(--stepkit-border, #e3e4e9); border-radius: var(--stepkit-radius, 16px); display: flex; flex-direction: column; padding: clamp(20px, 3vw, 28px); position: relative; }\n.stepkit-pricing-comparison__plan[data-recommended=\"true\"] { border-color: var(--stepkit-accent, #6950df); box-shadow: 0 14px 40px color-mix(in srgb, var(--stepkit-accent, #6950df) 15%, transparent); transform: translateY(-8px); }\n.stepkit-pricing-comparison__recommended { background: var(--stepkit-accent, #6950df); border-radius: 999px; color: #fff; font-size: 11px; font-weight: 800; padding: 5px 9px; position: absolute; right: 18px; text-transform: uppercase; top: 18px; }\n.stepkit-pricing-comparison__name { font-size: 18px; font-weight: 800; }\n.stepkit-pricing-comparison__description { color: var(--stepkit-muted, #626572); font-size: 14px; margin: 7px 0 20px; }\n.stepkit-pricing-comparison__price { font-size: 42px; font-weight: 850; letter-spacing: -.08em; line-height: 1; }\n.stepkit-pricing-comparison__interval { color: var(--stepkit-muted, #626572); font-size: 13px; margin-left: 5px; }\n.stepkit-pricing-comparison__features { border-top: 1px solid var(--stepkit-border, #e3e4e9); display: grid; gap: 10px; list-style: none; margin: 22px 0; padding: 18px 0 0; }\n.stepkit-pricing-comparison__feature { color: var(--stepkit-muted, #626572); font-size: 14px; }\n.stepkit-pricing-comparison__feature::before { color: var(--stepkit-accent-on-soft, #5137c7); content: \"✓\"; font-weight: 800; margin-right: 9px; }\n.stepkit-pricing-comparison__action { margin-top: auto; width: 100%; }\n@media (max-width: 760px) { .stepkit-pricing-comparison { grid-template-columns: 1fr; } .stepkit-pricing-comparison__plan[data-recommended=\"true\"] { transform: none; } }\n\n.stepkit-testimonials { display: grid; gap: var(--stepkit-space, 16px); grid-template-columns: repeat(3, minmax(0, 1fr)); }\n.stepkit-testimonials__item { background: var(--stepkit-surface, #fff); border: 1px solid var(--stepkit-border, #e3e4e9); border-radius: var(--stepkit-radius, 16px); display: grid; gap: 20px; padding: 22px; }\n.stepkit-testimonials__quote { font-size: 18px; letter-spacing: -.03em; margin: 0; }\n.stepkit-testimonials__author { align-items: center; display: flex; gap: 10px; }\n.stepkit-testimonials__avatar { align-items: center; background: var(--stepkit-accent-soft, #eeeafd); border-radius: 50%; color: var(--stepkit-accent-on-soft, #5137c7); display: flex; font-size: 12px; font-weight: 850; height: 34px; justify-content: center; width: 34px; }\n.stepkit-testimonials__name { font-size: 13px; font-weight: 800; }\n.stepkit-testimonials__role { color: var(--stepkit-muted, #626572); display: block; font-size: 12px; }\n@media (max-width: 760px) { .stepkit-testimonials { grid-template-columns: 1fr; } }\n\n.stepkit-faq { display: grid; gap: 28px; grid-template-columns: minmax(180px, .6fr) minmax(0, 1.4fr); }\n.stepkit-faq__intro h3 { font-size: clamp(28px, 5vw, 48px); letter-spacing: -.07em; line-height: 1; margin: 0 0 12px; }\n.stepkit-faq__intro p { color: var(--stepkit-muted, #626572); margin: 0; }\n@media (max-width: 700px) { .stepkit-faq { grid-template-columns: 1fr; } }\n\n.stepkit-footer { border-top: 1px solid var(--stepkit-border, #e3e4e9); display: grid; gap: 28px; grid-template-columns: 1.3fr repeat(3, 1fr); padding: 34px 0 12px; }\n.stepkit-footer__brand { font-size: 20px; font-weight: 850; letter-spacing: -.05em; }\n.stepkit-footer__note { color: var(--stepkit-muted, #626572); font-size: 13px; margin: 8px 0 0; max-width: 26ch; }\n.stepkit-footer__group h4 { font-size: 12px; margin: 0 0 10px; }\n.stepkit-footer__links { display: grid; gap: 7px; }\n.stepkit-footer__link { color: var(--stepkit-muted, #626572); font-size: 13px; text-decoration: none; }\n.stepkit-footer__link:hover { color: var(--stepkit-accent-on-soft, #5137c7); text-decoration: underline; }\n.stepkit-footer__copyright { border-top: 1px solid var(--stepkit-border, #e3e4e9); color: var(--stepkit-muted, #626572); font-size: 12px; grid-column: 1 / -1; padding-top: 14px; }\n@media (max-width: 700px) { .stepkit-footer { grid-template-columns: repeat(2, 1fr); } .stepkit-footer__brand { grid-column: 1 / -1; } }\n\n@keyframes stepkit-spin { to { transform: rotate(360deg); } }\n@keyframes stepkit-fade-in { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }\n@keyframes stepkit-rise { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }\n@keyframes stepkit-reveal { to { opacity: 1; transform: none; } }\n@media (prefers-reduced-motion: reduce) { .stepkit, .stepkit *, .stepkit::before, .stepkit::after, .stepkit *::before, .stepkit *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; scroll-behavior: auto !important; transition-duration: .01ms !important; } }\n.stepkit-sr-only { clip: rect(0 0 0 0); clip-path: inset(50%); height: 1px; overflow: hidden; position: absolute; white-space: nowrap; width: 1px; }\n\n/* Magic UI Border Beam adaptation: local CSS path, tokens, and motion bounds. */\n.stepkit-border-highlight { isolation: isolate; overflow: hidden; position: relative; }\n.stepkit-border-highlight::before { background: linear-gradient(120deg, color-mix(in srgb, var(--stepkit-beam-from, var(--stepkit-accent, #6950df)) 44%, transparent), transparent 58%, color-mix(in srgb, var(--stepkit-beam-to, var(--stepkit-accent-strong, #5137c7)) 40%, transparent)) border-box; border: var(--stepkit-beam-width, 1px) solid transparent; border-radius: inherit; content: \"\"; inset: 0; mask: linear-gradient(#000 0 0) padding-box, linear-gradient(#000 0 0); mask-composite: exclude; opacity: .5; pointer-events: none; position: absolute; }\n.stepkit-border-highlight__beam { aspect-ratio: 1; background: radial-gradient(circle, var(--stepkit-beam-from, var(--stepkit-accent, #6950df)) 0 16%, var(--stepkit-beam-to, var(--stepkit-accent-strong, #5137c7)) 37%, transparent 72%); border-radius: 50%; filter: blur(1px); height: var(--stepkit-beam-size, 52px); left: calc(var(--stepkit-beam-size, 52px) * -.5); offset-distance: var(--stepkit-beam-start, 0%); offset-path: inset(0 round var(--stepkit-radius, 16px)); opacity: .8; pointer-events: none; position: absolute; top: calc(var(--stepkit-beam-size, 52px) * -.5); animation: stepkit-border-beam calc(var(--stepkit-beam-duration, 6) * 1s) linear calc(var(--stepkit-beam-delay, 0) * -1s) infinite; z-index: 0; }\n.stepkit-border-highlight[data-reverse=\"true\"] .stepkit-border-highlight__beam { animation-direction: reverse; }\n.stepkit-border-highlight[data-intensity=\"subtle\"] .stepkit-border-highlight__beam { opacity: .56; }\n.stepkit-border-highlight[data-intensity=\"strong\"] .stepkit-border-highlight__beam { opacity: .95; }\n.stepkit-border-highlight[data-paused=\"true\"] .stepkit-border-highlight__beam { animation-play-state: paused; }\n.stepkit-border-highlight > :not(.stepkit-border-highlight__beam) { position: relative; z-index: 1; }\n.stepkit-number-transition { color: var(--stepkit-fg, #17181c); font-variant-numeric: tabular-nums; font-weight: 800; }\n@keyframes stepkit-border-beam { from { offset-distance: var(--stepkit-beam-start, 0%); } to { offset-distance: calc(var(--stepkit-beam-start, 0%) + 100%); } }\n@media (prefers-reduced-motion: reduce) { .stepkit-border-highlight__beam { animation: none; offset-distance: var(--stepkit-beam-start, 0%); } }\n",
      "type": "registry:style",
      "target": "components/stepkit/styles.css"
    },
    {
      "path": "NOTICE.md",
      "content": "Stepkit 0.3.0\nCopyright (c) 2026 Vladislav Stepanov\n\nOriginal Stepkit portions in this release are licensed under the MIT License. Adapted portions identify their upstream licence and attribution in the copied source and in the entry-specific upstream notice files.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n",
      "type": "registry:file",
      "target": "NOTICE.md"
    },
    {
      "path": "PROVENANCE-stepkit-orbital-timeline.md",
      "content": "# Stepkit provenance: Orbital timeline\n\nRelease: Stepkit 0.3.0\nOrigin: Adapted\nLicence: MIT\n\nThis source is a local Stepkit adaptation. The upstream reference and licence evidence are recorded below; Stepkit-specific props, class names, tokens, and implementation constraints are maintained in the copied source.\n\n## Upstream evidence\n\n- Jatin Yadav Radial Orbital Timeline\n  - Source: https://cdn.21st.dev/user_2ra80vx0iKMyQWJ5AESmNfFbCHD/radial-orbital-timeline/code.tsx?v=1\n  - Snapshot SHA-256: c7f9cac4c586ec55136e55407d6f7fe939a705ff06eeb5fb32f761ebf95602a6\n  - Source snapshot: provenance/jatin-radial-orbital-timeline-21st-code.tsx\n  - Notice snapshot: provenance/NOTICE-21ST-JATIN-YADAV.md\n  - Licence: MIT (component page label)\n\nSee `NOTICE.md` for the Stepkit MIT notice.\nSee `NOTICE-21ST-JATIN-YADAV.md` for the upstream notice associated with Jatin Yadav Radial Orbital Timeline.\n",
      "type": "registry:file",
      "target": "PROVENANCE-stepkit-orbital-timeline.md"
    },
    {
      "path": "NOTICE-21ST-JATIN-YADAV.md",
      "content": "MIT License\n\nUpstream attribution: Jatin Yadav, Radial Orbital Timeline, as published at\nhttps://21st.dev/@jatin-yadav05/components/radial-orbital-timeline\n\nThe upstream component page labels this component MIT License and does not\nprovide a separate copyright line. No copyright holder or year is added here.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n",
      "type": "registry:file",
      "target": "NOTICE-21ST-JATIN-YADAV.md"
    }
  ],
  "docs": "# Orbital timeline\n\nA radial project timeline adapted from Jatin Yadav's MIT-labelled 21st.dev component.\n\nStepkit 0.3.0 · Adapted · MIT\n\nThe generated source keeps user text as text and includes the shared styles file.\n\n## Usage\n\n```tsx\n\"use client\";\n\nimport type { CSSProperties } from \"react\";\nimport { OrbitalTimeline } from \"./components/stepkit/OrbitalTimeline\";\nimport \"./components/stepkit/styles.css\";\nimport \"./components/stepkit/adapted-showcase.css\";\n\nconst themeStyle = {\"--stepkit-bg\":\"#111217\",\"--stepkit-surface\":\"#1b1c24\",\"--stepkit-surface-muted\":\"#22232d\",\"--stepkit-fg\":\"#f6f5fb\",\"--stepkit-muted\":\"#a4a6b4\",\"--stepkit-border\":\"#343641\",\"--stepkit-border-strong\":\"#565866\",\"--stepkit-code\":\"#20212a\",\"--stepkit-shadow\":\"0 24px 70px rgba(0, 0, 0, .34)\",\"--stepkit-accent\":\"#2563eb\",\"--stepkit-accent-strong\":\"#1d4ed8\",\"--stepkit-accent-soft\":\"#1f356b\",\"--stepkit-accent-on-soft\":\"#a9c4ff\",\"--stepkit-accent-text\":\"#ffffff\",\"--stepkit-error\":\"#ff9ba9\",\"--stepkit-placeholder\":\"#b8bac6\",\"--stepkit-radius\":\"16px\",\"--stepkit-space\":\"16px\",\"--stepkit-control-height\":\"44px\",\"--stepkit-font-sans\":\"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", sans-serif\"} as CSSProperties;\n\nconst timelineData: import(\"./components/stepkit/OrbitalTimeline\").TimelineItem[] = [{ id: 1, title: \"Research\", date: \"Mar 04\", content: \"Turn the first signal into a useful direction.\", category: \"Research\", relatedIds: [2], status: \"completed\", energy: 86 }, { id: 2, title: \"Design\", date: \"Mar 11\", content: \"Make the idea legible before it becomes large.\", category: \"Design\", relatedIds: [1, 3], status: \"in-progress\", energy: 68 }, { id: 3, title: \"Build\", date: \"Mar 18\", content: \"Carry the shape into a working surface.\", category: \"Build\", relatedIds: [2, 4], status: \"in-progress\", energy: 54 }, { id: 4, title: \"Test\", date: \"Mar 25\", content: \"Check the details that make the experience hold together.\", category: \"Testing\", relatedIds: [3, 5], status: \"pending\", energy: 35 }, { id: 5, title: \"Release\", date: \"Apr 01\", content: \"Give the finished idea a clear path into the world.\", category: \"Release\", relatedIds: [4], status: \"pending\", energy: 20 }];\n\nexport default function Example() {\n  return (\n    <div className=\"stepkit-theme\" data-stepkit-preset=\"modern\" style={themeStyle}>\n      <OrbitalTimeline\n      timelineData={timelineData}\n      title={\"Project orbit\"}\n      paused={false}\n      />\n    </div>\n  );\n}\n```\n\n## Dependencies\n\n- react@19.3.0\n- react-dom@19.3.0\n\nSee `NOTICE.md`, `PROVENANCE-stepkit-orbital-timeline.md`, `NOTICE-21ST-JATIN-YADAV.md` for the notices and provenance that must travel with copied source.\n",
  "categories": [
    "effects"
  ],
  "meta": {
    "stepkit": {
      "version": "0.3.0",
      "slug": "orbital-timeline",
      "componentName": "OrbitalTimeline",
      "origin": "Adapted",
      "license": "MIT",
      "sourceFiles": [
        "components/OrbitalTimeline.tsx",
        "components/adapted-showcase.css",
        "components/styles.css"
      ],
      "provenance": {
        "kind": "adapted",
        "upstream": [
          {
            "name": "Jatin Yadav Radial Orbital Timeline",
            "url": "https://cdn.21st.dev/user_2ra80vx0iKMyQWJ5AESmNfFbCHD/radial-orbital-timeline/code.tsx?v=1",
            "componentPage": "https://21st.dev/@jatin-yadav05/components/radial-orbital-timeline",
            "revision": 1217,
            "versionId": "0c1fc876-f852-47a0-9102-3355a112125e",
            "sha256": "c7f9cac4c586ec55136e55407d6f7fe939a705ff06eeb5fb32f761ebf95602a6",
            "license": "MIT (component page label)",
            "noticeFile": "NOTICE-21ST-JATIN-YADAV.md",
            "noticePath": "provenance/NOTICE-21ST-JATIN-YADAV.md",
            "licenseEvidence": "provenance/21ST-JATIN-RADIAL-ORBITAL-LICENSE-EVIDENCE.md",
            "sourceSnapshot": "provenance/jatin-radial-orbital-timeline-21st-code.tsx"
          }
        ]
      },
      "upstream": [
        {
          "name": "Jatin Yadav Radial Orbital Timeline",
          "url": "https://cdn.21st.dev/user_2ra80vx0iKMyQWJ5AESmNfFbCHD/radial-orbital-timeline/code.tsx?v=1",
          "componentPage": "https://21st.dev/@jatin-yadav05/components/radial-orbital-timeline",
          "revision": 1217,
          "versionId": "0c1fc876-f852-47a0-9102-3355a112125e",
          "sha256": "c7f9cac4c586ec55136e55407d6f7fe939a705ff06eeb5fb32f761ebf95602a6",
          "license": "MIT (component page label)",
          "noticeFile": "NOTICE-21ST-JATIN-YADAV.md",
          "noticePath": "provenance/NOTICE-21ST-JATIN-YADAV.md",
          "licenseEvidence": "provenance/21ST-JATIN-RADIAL-ORBITAL-LICENSE-EVIDENCE.md",
          "sourceSnapshot": "provenance/jatin-radial-orbital-timeline-21st-code.tsx"
        }
      ],
      "noticeFiles": [
        "NOTICE.md",
        "PROVENANCE-stepkit-orbital-timeline.md",
        "NOTICE-21ST-JATIN-YADAV.md"
      ]
    }
  }
}
