@ciderpress/ui 1.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +23 -0
- package/dist/0~142.js +2 -0
- package/dist/0~164.js +2 -0
- package/dist/0~2.js +2 -0
- package/dist/0~225.js +2 -0
- package/dist/0~288.js +2 -0
- package/dist/0~299.js +2 -0
- package/dist/0~3.js +2 -0
- package/dist/0~301.js +2 -0
- package/dist/0~311.js +2 -0
- package/dist/0~326.js +2 -0
- package/dist/0~40.js +2 -0
- package/dist/0~43.js +2 -0
- package/dist/0~433.js +2 -0
- package/dist/0~453.js +2 -0
- package/dist/0~457.js +2 -0
- package/dist/0~497.js +2 -0
- package/dist/0~511.js +2 -0
- package/dist/0~603.js +2 -0
- package/dist/0~616.js +2 -0
- package/dist/0~659.js +2 -0
- package/dist/0~670.js +2 -0
- package/dist/0~687.js +2 -0
- package/dist/0~706.js +2 -0
- package/dist/0~729.js +2 -0
- package/dist/0~768.js +2 -0
- package/dist/0~819.js +2 -0
- package/dist/0~830.js +2 -0
- package/dist/0~854.js +2 -0
- package/dist/0~863.js +2 -0
- package/dist/0~879.js +2 -0
- package/dist/0~96.js +2 -0
- package/dist/0~97.js +2 -0
- package/dist/components/FileTree/FileTree.css +90 -0
- package/dist/components/FileTree/FileTree.d.ts +7 -0
- package/dist/components/FileTree/FileTree.js +531 -0
- package/dist/components/FileTree/FileTreeItem.d.ts +8 -0
- package/dist/components/FileTree/RemoteSvgIcon.d.ts +11 -0
- package/dist/components/FileTree/index.d.ts +4 -0
- package/dist/components/folder-icons.d.ts +32 -0
- package/dist/components/languages.d.ts +7 -0
- package/dist/components/tree-parser/tree-parser.d.ts +12 -0
- package/dist/components/tree-parser/types.d.ts +11 -0
- package/dist/head/css/loader-apple.css +1 -0
- package/dist/head/css/loader-backdrop.css +1 -0
- package/dist/head/css/loader-dots.css +1 -0
- package/dist/head/css/themes/amber.css +1 -0
- package/dist/head/css/themes/arcade.css +1 -0
- package/dist/head/css/themes/grannysmith.css +1 -0
- package/dist/head/css/themes/honeycrisp.css +1 -0
- package/dist/head/css/themes/midnight.css +1 -0
- package/dist/head/css/themes/mulled.css +1 -0
- package/dist/head/js/loader-dots.js +1 -0
- package/dist/head/js/vscode-nav.js +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.mjs +40 -0
- package/dist/node.d.ts +81 -0
- package/dist/node.mjs +17762 -0
- package/dist/plugins/mermaid/MermaidRenderer.tsx +480 -0
- package/dist/plugins/mermaid/mermaid.css +199 -0
- package/dist/theme/components/announcement/announcement-bar.css +103 -0
- package/dist/theme/components/announcement/announcement-bar.tsx +173 -0
- package/dist/theme/components/ask-ai/ask-ai-button.css +52 -0
- package/dist/theme/components/ask-ai/ask-ai-button.tsx +56 -0
- package/dist/theme/components/content-footer/content-footer-portal.tsx +70 -0
- package/dist/theme/components/content-footer/feedback.css +47 -0
- package/dist/theme/components/content-footer/feedback.tsx +96 -0
- package/dist/theme/components/content-footer/meta-actions.css +25 -0
- package/dist/theme/components/content-footer/meta-actions.tsx +57 -0
- package/dist/theme/components/content-footer/page-pager.css +61 -0
- package/dist/theme/components/content-footer/page-pager.tsx +110 -0
- package/dist/theme/components/edit-source-button.tsx +97 -0
- package/dist/theme/components/footer/site-footer.css +179 -0
- package/dist/theme/components/footer/site-footer.tsx +115 -0
- package/dist/theme/components/home/cta.css +67 -0
- package/dist/theme/components/home/cta.tsx +77 -0
- package/dist/theme/components/home/feature-card.css +52 -0
- package/dist/theme/components/home/feature-card.tsx +131 -0
- package/dist/theme/components/home/feature.tsx +79 -0
- package/dist/theme/components/home/hero-demo.css +66 -0
- package/dist/theme/components/home/hero-demo.tsx +46 -0
- package/dist/theme/components/home/hero.css +96 -0
- package/dist/theme/components/home/hero.tsx +111 -0
- package/dist/theme/components/home/layout.tsx +183 -0
- package/dist/theme/components/home/page-rail.css +21 -0
- package/dist/theme/components/home/page-rail.tsx +19 -0
- package/dist/theme/components/home/split.css +148 -0
- package/dist/theme/components/home/split.tsx +120 -0
- package/dist/theme/components/home/trust-strip.css +33 -0
- package/dist/theme/components/home/trust-strip.tsx +43 -0
- package/dist/theme/components/home/workspaces.tsx +71 -0
- package/dist/theme/components/nav/branch-tag.css +54 -0
- package/dist/theme/components/nav/branch-tag.tsx +101 -0
- package/dist/theme/components/nav/ciderpress-doc-layout.tsx +247 -0
- package/dist/theme/components/nav/ciderpress-docs-bar.css +505 -0
- package/dist/theme/components/nav/ciderpress-docs-bar.tsx +426 -0
- package/dist/theme/components/nav/ciderpress-header.css +172 -0
- package/dist/theme/components/nav/ciderpress-header.tsx +113 -0
- package/dist/theme/components/nav/ciderpress-layout-context.tsx +49 -0
- package/dist/theme/components/nav/ciderpress-nav-hamburger.css +193 -0
- package/dist/theme/components/nav/ciderpress-nav-hamburger.tsx +112 -0
- package/dist/theme/components/nav/ciderpress-nav-menu.css +130 -0
- package/dist/theme/components/nav/ciderpress-nav-menu.tsx +372 -0
- package/dist/theme/components/nav/ciderpress-nav-search.css +73 -0
- package/dist/theme/components/nav/ciderpress-nav-search.tsx +55 -0
- package/dist/theme/components/nav/ciderpress-nav-social-links.css +35 -0
- package/dist/theme/components/nav/ciderpress-nav-social-links.tsx +87 -0
- package/dist/theme/components/nav/floating-branch-indicator.css +106 -0
- package/dist/theme/components/nav/floating-branch-indicator.tsx +109 -0
- package/dist/theme/components/nav/layout.tsx +268 -0
- package/dist/theme/components/nav/mobile-nav-cta.tsx +79 -0
- package/dist/theme/components/nav/nav-divider.css +15 -0
- package/dist/theme/components/nav/nav-divider.tsx +19 -0
- package/dist/theme/components/nav/nav-logo.css +42 -0
- package/dist/theme/components/nav/nav-logo.tsx +262 -0
- package/dist/theme/components/nav/theme-switcher.css +92 -0
- package/dist/theme/components/nav/theme-switcher.tsx +298 -0
- package/dist/theme/components/nav/topbar-cta.css +45 -0
- package/dist/theme/components/nav/topbar-cta.tsx +39 -0
- package/dist/theme/components/nav/variant-toggle.css +70 -0
- package/dist/theme/components/nav/variant-toggle.tsx +83 -0
- package/dist/theme/components/nav/version-chip.css +31 -0
- package/dist/theme/components/nav/version-chip.tsx +45 -0
- package/dist/theme/components/nav/vscode-tag.css +32 -0
- package/dist/theme/components/nav/vscode-tag.tsx +20 -0
- package/dist/theme/components/openapi/code-sample.tsx +341 -0
- package/dist/theme/components/openapi/copy-markdown-button.tsx +41 -0
- package/dist/theme/components/openapi/icons.tsx +45 -0
- package/dist/theme/components/openapi/index.ts +6 -0
- package/dist/theme/components/openapi/method-badge.tsx +24 -0
- package/dist/theme/components/openapi/openapi.css +665 -0
- package/dist/theme/components/openapi/operation.tsx +200 -0
- package/dist/theme/components/openapi/overview.tsx +207 -0
- package/dist/theme/components/openapi/parameters-table.tsx +149 -0
- package/dist/theme/components/openapi/request-body.tsx +90 -0
- package/dist/theme/components/openapi/response-list.tsx +112 -0
- package/dist/theme/components/openapi/schema-viewer.tsx +277 -0
- package/dist/theme/components/openapi/security-badges.tsx +63 -0
- package/dist/theme/components/openapi/spec-utils.ts +122 -0
- package/dist/theme/components/shared/accordion.css +118 -0
- package/dist/theme/components/shared/accordion.stories.tsx +96 -0
- package/dist/theme/components/shared/accordion.tsx +191 -0
- package/dist/theme/components/shared/brand-logo.stories.tsx +49 -0
- package/dist/theme/components/shared/brand-mark.stories.tsx +53 -0
- package/dist/theme/components/shared/browser-window.css +1 -0
- package/dist/theme/components/shared/browser-window.stories.tsx +100 -0
- package/dist/theme/components/shared/browser-window.tsx +2 -0
- package/dist/theme/components/shared/card.stories.tsx +50 -0
- package/dist/theme/components/shared/card.tsx +35 -0
- package/dist/theme/components/shared/ciderpress-logo.tsx +93 -0
- package/dist/theme/components/shared/ciderpress-mark.tsx +77 -0
- package/dist/theme/components/shared/color.css +56 -0
- package/dist/theme/components/shared/color.stories.tsx +47 -0
- package/dist/theme/components/shared/color.tsx +69 -0
- package/dist/theme/components/shared/columns.css +37 -0
- package/dist/theme/components/shared/columns.stories.tsx +91 -0
- package/dist/theme/components/shared/columns.tsx +50 -0
- package/dist/theme/components/shared/desktop-window.css +339 -0
- package/dist/theme/components/shared/desktop-window.tsx +535 -0
- package/dist/theme/components/shared/field.css +158 -0
- package/dist/theme/components/shared/field.stories.tsx +100 -0
- package/dist/theme/components/shared/field.tsx +186 -0
- package/dist/theme/components/shared/frame.css +39 -0
- package/dist/theme/components/shared/frame.stories.tsx +49 -0
- package/dist/theme/components/shared/frame.tsx +76 -0
- package/dist/theme/components/shared/icon.stories.tsx +90 -0
- package/dist/theme/components/shared/icon.tsx +41 -0
- package/dist/theme/components/shared/prompt.css +178 -0
- package/dist/theme/components/shared/prompt.stories.tsx +57 -0
- package/dist/theme/components/shared/prompt.tsx +369 -0
- package/dist/theme/components/shared/resolve-card-icon.ts +28 -0
- package/dist/theme/components/shared/section-card.stories.tsx +51 -0
- package/dist/theme/components/shared/section-card.tsx +44 -0
- package/dist/theme/components/shared/section-grid.stories.tsx +46 -0
- package/dist/theme/components/shared/section-grid.tsx +15 -0
- package/dist/theme/components/shared/status-badge.css +37 -0
- package/dist/theme/components/shared/status-badge.stories.tsx +61 -0
- package/dist/theme/components/shared/status-badge.tsx +74 -0
- package/dist/theme/components/shared/steps.css +88 -0
- package/dist/theme/components/shared/steps.stories.tsx +68 -0
- package/dist/theme/components/shared/steps.tsx +100 -0
- package/dist/theme/components/shared/tech-icon-table.stories.tsx +29 -0
- package/dist/theme/components/shared/tech-icon-table.tsx +71 -0
- package/dist/theme/components/shared/tech-tag.stories.tsx +40 -0
- package/dist/theme/components/shared/tech-tag.tsx +31 -0
- package/dist/theme/components/shared/theme-color-palette.css +80 -0
- package/dist/theme/components/shared/theme-color-palette.stories.tsx +52 -0
- package/dist/theme/components/shared/theme-color-palette.tsx +275 -0
- package/dist/theme/components/shared/tooltip.css +69 -0
- package/dist/theme/components/shared/tooltip.stories.tsx +72 -0
- package/dist/theme/components/shared/tooltip.tsx +77 -0
- package/dist/theme/components/sidebar/framework-picker.css +77 -0
- package/dist/theme/components/sidebar/framework-picker.tsx +78 -0
- package/dist/theme/components/sidebar/sidebar-filter.test.ts +140 -0
- package/dist/theme/components/sidebar/sidebar-filter.ts +79 -0
- package/dist/theme/components/sidebar/sidebar-links.css +102 -0
- package/dist/theme/components/sidebar/sidebar-links.tsx +122 -0
- package/dist/theme/components/sidebar/sidebar-promo.css +42 -0
- package/dist/theme/components/sidebar/sidebar-promo.tsx +52 -0
- package/dist/theme/components/sidebar/sidebar-scope.tsx +151 -0
- package/dist/theme/components/sidebar/sidebar-toggle.css +181 -0
- package/dist/theme/components/sidebar/sidebar-toggle.tsx +127 -0
- package/dist/theme/components/theme-provider.tsx +637 -0
- package/dist/theme/components/workspaces/card.css +151 -0
- package/dist/theme/components/workspaces/card.tsx +166 -0
- package/dist/theme/components/workspaces/grid.tsx +62 -0
- package/dist/theme/css.d.ts +1 -0
- package/dist/theme/env.d.ts +12 -0
- package/dist/theme/fonts/GeistMono-Variable.woff2 +0 -0
- package/dist/theme/fonts/GeistPixel-Square.woff2 +0 -0
- package/dist/theme/fonts/GeistSans-Variable.woff2 +0 -0
- package/dist/theme/hooks/use-ciderpress.ts +61 -0
- package/dist/theme/hooks/use-nav-items.ts +76 -0
- package/dist/theme/icons/index.ts +2 -0
- package/dist/theme/icons/tech-map.ts +228 -0
- package/dist/theme/index.tsx +180 -0
- package/dist/theme/lib/read-social-links.ts +27 -0
- package/dist/theme/lib/route-link.tsx +126 -0
- package/dist/theme/lib/safe-url.test.ts +0 -0
- package/dist/theme/lib/safe-url.ts +68 -0
- package/dist/theme/lib/theme-favicon.ts +125 -0
- package/dist/theme/lib/user-config-stub.ts +12 -0
- package/dist/theme/styles/layers.css +32 -0
- package/dist/theme/styles/overrides/badge.css +26 -0
- package/dist/theme/styles/overrides/content-footer.css +80 -0
- package/dist/theme/styles/overrides/details.css +61 -0
- package/dist/theme/styles/overrides/fonts.css +32 -0
- package/dist/theme/styles/overrides/home-card.css +133 -0
- package/dist/theme/styles/overrides/home.css +243 -0
- package/dist/theme/styles/overrides/rail.css +337 -0
- package/dist/theme/styles/overrides/rspress.css +62 -0
- package/dist/theme/styles/overrides/scrollbar.css +25 -0
- package/dist/theme/styles/overrides/section-card.css +114 -0
- package/dist/theme/styles/overrides/sidebar.css +144 -0
- package/dist/theme/styles/overrides/tokens.css +288 -0
- package/dist/theme/styles/overrides/vscode.css +88 -0
- package/dist/theme/styles/themes/amber.css +545 -0
- package/dist/theme/styles/themes/arcade-fx.css +366 -0
- package/dist/theme/styles/themes/arcade.css +273 -0
- package/dist/theme/styles/themes/grannysmith.css +545 -0
- package/dist/theme/styles/themes/honeycrisp.css +545 -0
- package/dist/theme/styles/themes/midnight.css +273 -0
- package/dist/theme/styles/themes/mulled.css +817 -0
- package/package.json +103 -0
- package/src/theme/components/announcement/announcement-bar.css +103 -0
- package/src/theme/components/announcement/announcement-bar.tsx +173 -0
- package/src/theme/components/ask-ai/ask-ai-button.css +52 -0
- package/src/theme/components/ask-ai/ask-ai-button.tsx +56 -0
- package/src/theme/components/content-footer/content-footer-portal.tsx +70 -0
- package/src/theme/components/content-footer/feedback.css +47 -0
- package/src/theme/components/content-footer/feedback.tsx +96 -0
- package/src/theme/components/content-footer/meta-actions.css +25 -0
- package/src/theme/components/content-footer/meta-actions.tsx +57 -0
- package/src/theme/components/content-footer/page-pager.css +61 -0
- package/src/theme/components/content-footer/page-pager.tsx +110 -0
- package/src/theme/components/edit-source-button.tsx +97 -0
- package/src/theme/components/footer/site-footer.css +179 -0
- package/src/theme/components/footer/site-footer.tsx +115 -0
- package/src/theme/components/home/cta.css +67 -0
- package/src/theme/components/home/cta.tsx +77 -0
- package/src/theme/components/home/feature-card.css +52 -0
- package/src/theme/components/home/feature-card.tsx +131 -0
- package/src/theme/components/home/feature.tsx +79 -0
- package/src/theme/components/home/hero-demo.css +66 -0
- package/src/theme/components/home/hero-demo.tsx +46 -0
- package/src/theme/components/home/hero.css +96 -0
- package/src/theme/components/home/hero.tsx +111 -0
- package/src/theme/components/home/layout.tsx +183 -0
- package/src/theme/components/home/page-rail.css +21 -0
- package/src/theme/components/home/page-rail.tsx +19 -0
- package/src/theme/components/home/split.css +148 -0
- package/src/theme/components/home/split.tsx +120 -0
- package/src/theme/components/home/trust-strip.css +33 -0
- package/src/theme/components/home/trust-strip.tsx +43 -0
- package/src/theme/components/home/workspaces.tsx +71 -0
- package/src/theme/components/nav/branch-tag.css +54 -0
- package/src/theme/components/nav/branch-tag.tsx +101 -0
- package/src/theme/components/nav/ciderpress-doc-layout.tsx +247 -0
- package/src/theme/components/nav/ciderpress-docs-bar.css +505 -0
- package/src/theme/components/nav/ciderpress-docs-bar.tsx +426 -0
- package/src/theme/components/nav/ciderpress-header.css +172 -0
- package/src/theme/components/nav/ciderpress-header.tsx +113 -0
- package/src/theme/components/nav/ciderpress-layout-context.tsx +49 -0
- package/src/theme/components/nav/ciderpress-nav-hamburger.css +193 -0
- package/src/theme/components/nav/ciderpress-nav-hamburger.tsx +112 -0
- package/src/theme/components/nav/ciderpress-nav-menu.css +130 -0
- package/src/theme/components/nav/ciderpress-nav-menu.tsx +372 -0
- package/src/theme/components/nav/ciderpress-nav-search.css +73 -0
- package/src/theme/components/nav/ciderpress-nav-search.tsx +55 -0
- package/src/theme/components/nav/ciderpress-nav-social-links.css +35 -0
- package/src/theme/components/nav/ciderpress-nav-social-links.tsx +87 -0
- package/src/theme/components/nav/floating-branch-indicator.css +106 -0
- package/src/theme/components/nav/floating-branch-indicator.tsx +109 -0
- package/src/theme/components/nav/layout.tsx +268 -0
- package/src/theme/components/nav/mobile-nav-cta.tsx +79 -0
- package/src/theme/components/nav/nav-divider.css +15 -0
- package/src/theme/components/nav/nav-divider.tsx +19 -0
- package/src/theme/components/nav/nav-logo.css +42 -0
- package/src/theme/components/nav/nav-logo.tsx +262 -0
- package/src/theme/components/nav/theme-switcher.css +92 -0
- package/src/theme/components/nav/theme-switcher.tsx +298 -0
- package/src/theme/components/nav/topbar-cta.css +45 -0
- package/src/theme/components/nav/topbar-cta.tsx +39 -0
- package/src/theme/components/nav/variant-toggle.css +70 -0
- package/src/theme/components/nav/variant-toggle.tsx +83 -0
- package/src/theme/components/nav/version-chip.css +31 -0
- package/src/theme/components/nav/version-chip.tsx +45 -0
- package/src/theme/components/nav/vscode-tag.css +32 -0
- package/src/theme/components/nav/vscode-tag.tsx +20 -0
- package/src/theme/components/openapi/code-sample.tsx +341 -0
- package/src/theme/components/openapi/copy-markdown-button.tsx +41 -0
- package/src/theme/components/openapi/icons.tsx +45 -0
- package/src/theme/components/openapi/index.ts +6 -0
- package/src/theme/components/openapi/method-badge.tsx +24 -0
- package/src/theme/components/openapi/openapi.css +665 -0
- package/src/theme/components/openapi/operation.tsx +200 -0
- package/src/theme/components/openapi/overview.tsx +207 -0
- package/src/theme/components/openapi/parameters-table.tsx +149 -0
- package/src/theme/components/openapi/request-body.tsx +90 -0
- package/src/theme/components/openapi/response-list.tsx +112 -0
- package/src/theme/components/openapi/schema-viewer.tsx +277 -0
- package/src/theme/components/openapi/security-badges.tsx +63 -0
- package/src/theme/components/openapi/spec-utils.ts +122 -0
- package/src/theme/components/shared/accordion.css +118 -0
- package/src/theme/components/shared/accordion.stories.tsx +96 -0
- package/src/theme/components/shared/accordion.tsx +191 -0
- package/src/theme/components/shared/brand-logo.stories.tsx +49 -0
- package/src/theme/components/shared/brand-mark.stories.tsx +53 -0
- package/src/theme/components/shared/browser-window.css +1 -0
- package/src/theme/components/shared/browser-window.stories.tsx +100 -0
- package/src/theme/components/shared/browser-window.tsx +2 -0
- package/src/theme/components/shared/card.stories.tsx +50 -0
- package/src/theme/components/shared/card.tsx +35 -0
- package/src/theme/components/shared/ciderpress-logo.tsx +93 -0
- package/src/theme/components/shared/ciderpress-mark.tsx +77 -0
- package/src/theme/components/shared/color.css +56 -0
- package/src/theme/components/shared/color.stories.tsx +47 -0
- package/src/theme/components/shared/color.tsx +69 -0
- package/src/theme/components/shared/columns.css +37 -0
- package/src/theme/components/shared/columns.stories.tsx +91 -0
- package/src/theme/components/shared/columns.tsx +50 -0
- package/src/theme/components/shared/desktop-window.css +339 -0
- package/src/theme/components/shared/desktop-window.tsx +535 -0
- package/src/theme/components/shared/field.css +158 -0
- package/src/theme/components/shared/field.stories.tsx +100 -0
- package/src/theme/components/shared/field.tsx +186 -0
- package/src/theme/components/shared/frame.css +39 -0
- package/src/theme/components/shared/frame.stories.tsx +49 -0
- package/src/theme/components/shared/frame.tsx +76 -0
- package/src/theme/components/shared/icon.stories.tsx +90 -0
- package/src/theme/components/shared/icon.tsx +41 -0
- package/src/theme/components/shared/prompt.css +178 -0
- package/src/theme/components/shared/prompt.stories.tsx +57 -0
- package/src/theme/components/shared/prompt.tsx +369 -0
- package/src/theme/components/shared/resolve-card-icon.ts +28 -0
- package/src/theme/components/shared/section-card.stories.tsx +51 -0
- package/src/theme/components/shared/section-card.tsx +44 -0
- package/src/theme/components/shared/section-grid.stories.tsx +46 -0
- package/src/theme/components/shared/section-grid.tsx +15 -0
- package/src/theme/components/shared/status-badge.css +37 -0
- package/src/theme/components/shared/status-badge.stories.tsx +61 -0
- package/src/theme/components/shared/status-badge.tsx +74 -0
- package/src/theme/components/shared/steps.css +88 -0
- package/src/theme/components/shared/steps.stories.tsx +68 -0
- package/src/theme/components/shared/steps.tsx +100 -0
- package/src/theme/components/shared/tech-icon-table.stories.tsx +29 -0
- package/src/theme/components/shared/tech-icon-table.tsx +71 -0
- package/src/theme/components/shared/tech-tag.stories.tsx +40 -0
- package/src/theme/components/shared/tech-tag.tsx +31 -0
- package/src/theme/components/shared/theme-color-palette.css +80 -0
- package/src/theme/components/shared/theme-color-palette.stories.tsx +52 -0
- package/src/theme/components/shared/theme-color-palette.tsx +275 -0
- package/src/theme/components/shared/tooltip.css +69 -0
- package/src/theme/components/shared/tooltip.stories.tsx +72 -0
- package/src/theme/components/shared/tooltip.tsx +77 -0
- package/src/theme/components/sidebar/framework-picker.css +77 -0
- package/src/theme/components/sidebar/framework-picker.tsx +78 -0
- package/src/theme/components/sidebar/sidebar-filter.test.ts +140 -0
- package/src/theme/components/sidebar/sidebar-filter.ts +79 -0
- package/src/theme/components/sidebar/sidebar-links.css +102 -0
- package/src/theme/components/sidebar/sidebar-links.tsx +122 -0
- package/src/theme/components/sidebar/sidebar-promo.css +42 -0
- package/src/theme/components/sidebar/sidebar-promo.tsx +52 -0
- package/src/theme/components/sidebar/sidebar-scope.tsx +151 -0
- package/src/theme/components/sidebar/sidebar-toggle.css +181 -0
- package/src/theme/components/sidebar/sidebar-toggle.tsx +127 -0
- package/src/theme/components/theme-provider.tsx +637 -0
- package/src/theme/components/workspaces/card.css +151 -0
- package/src/theme/components/workspaces/card.tsx +166 -0
- package/src/theme/components/workspaces/grid.tsx +62 -0
- package/src/theme/css.d.ts +1 -0
- package/src/theme/env.d.ts +12 -0
- package/src/theme/fonts/GeistMono-Variable.woff2 +0 -0
- package/src/theme/fonts/GeistPixel-Square.woff2 +0 -0
- package/src/theme/fonts/GeistSans-Variable.woff2 +0 -0
- package/src/theme/hooks/use-ciderpress.ts +61 -0
- package/src/theme/hooks/use-nav-items.ts +76 -0
- package/src/theme/icons/index.ts +2 -0
- package/src/theme/icons/tech-map.ts +228 -0
- package/src/theme/index.tsx +180 -0
- package/src/theme/lib/read-social-links.ts +27 -0
- package/src/theme/lib/route-link.tsx +126 -0
- package/src/theme/lib/safe-url.test.ts +0 -0
- package/src/theme/lib/safe-url.ts +68 -0
- package/src/theme/lib/theme-favicon.ts +125 -0
- package/src/theme/lib/user-config-stub.ts +12 -0
- package/src/theme/styles/layers.css +32 -0
- package/src/theme/styles/overrides/badge.css +26 -0
- package/src/theme/styles/overrides/content-footer.css +80 -0
- package/src/theme/styles/overrides/details.css +61 -0
- package/src/theme/styles/overrides/fonts.css +32 -0
- package/src/theme/styles/overrides/home-card.css +133 -0
- package/src/theme/styles/overrides/home.css +243 -0
- package/src/theme/styles/overrides/rail.css +337 -0
- package/src/theme/styles/overrides/rspress.css +62 -0
- package/src/theme/styles/overrides/scrollbar.css +25 -0
- package/src/theme/styles/overrides/section-card.css +114 -0
- package/src/theme/styles/overrides/sidebar.css +144 -0
- package/src/theme/styles/overrides/tokens.css +288 -0
- package/src/theme/styles/overrides/vscode.css +88 -0
- package/src/theme/styles/themes/amber.css +545 -0
- package/src/theme/styles/themes/arcade-fx.css +366 -0
- package/src/theme/styles/themes/arcade.css +273 -0
- package/src/theme/styles/themes/grannysmith.css +545 -0
- package/src/theme/styles/themes/honeycrisp.css +545 -0
- package/src/theme/styles/themes/midnight.css +273 -0
- package/src/theme/styles/themes/mulled.css +817 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { BRAND_COLORS, DEFAULT_THEME_NAME } from '@ciderpress/theme'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Sync the document favicon with the active theme's brand color.
|
|
5
|
+
*
|
|
6
|
+
* Browsers cache favicons aggressively and don't honour CSS custom
|
|
7
|
+
* properties inside referenced SVGs, so a static `/icon.svg` always
|
|
8
|
+
* paints with whatever colour the asset shipped with. To keep the tab
|
|
9
|
+
* mark in lockstep with the active theme (mulled burgundy, honeycrisp
|
|
10
|
+
* red, grannysmith green, amber hearth, midnight blue, arcade neon, …),
|
|
11
|
+
* we read the resolved `--cp-c-brand-1` / `--cp-c-brand-3` values off
|
|
12
|
+
* `<html>`, bake them into a fresh pixel-apple SVG, and point
|
|
13
|
+
* `<link rel="icon">` at the resulting data URI. Browsers treat a new
|
|
14
|
+
* data URI as a new icon resource and repaint the tab.
|
|
15
|
+
*
|
|
16
|
+
* Safe to call as often as needed — idempotent and inexpensive.
|
|
17
|
+
*
|
|
18
|
+
* @param html - Document root element (`<html>`)
|
|
19
|
+
*/
|
|
20
|
+
export function syncThemeFavicon(html: HTMLElement): void {
|
|
21
|
+
const brand = resolveBrandColor(html)
|
|
22
|
+
const shadow = resolveBrandShadow(html)
|
|
23
|
+
const surface = resolveSurfaceColor(html)
|
|
24
|
+
const dataUri = buildIconDataUri(brand, shadow, surface)
|
|
25
|
+
const link = ensureFaviconLink()
|
|
26
|
+
// oxlint-disable-next-line functional/immutable-data -- boundary mutation: updating link element href
|
|
27
|
+
link.type = 'image/svg+xml'
|
|
28
|
+
// oxlint-disable-next-line functional/immutable-data -- boundary mutation: updating link element href
|
|
29
|
+
link.href = dataUri
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const FALLBACK_BRAND = BRAND_COLORS[DEFAULT_THEME_NAME].primary
|
|
33
|
+
const FALLBACK_SHADOW = BRAND_COLORS[DEFAULT_THEME_NAME].active
|
|
34
|
+
const FALLBACK_SURFACE = '#0a0a0a'
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Read the resolved `--cp-c-brand-1` CSS custom property off the root
|
|
38
|
+
* element, falling back to the default theme's primary when the var is
|
|
39
|
+
* empty (which happens during the brief window before the theme
|
|
40
|
+
* stylesheet loads).
|
|
41
|
+
*
|
|
42
|
+
* @private
|
|
43
|
+
* @param html - Document root element
|
|
44
|
+
* @returns Brand colour as a CSS-parseable string
|
|
45
|
+
*/
|
|
46
|
+
function resolveBrandColor(html: HTMLElement): string {
|
|
47
|
+
const raw = globalThis.window.getComputedStyle(html).getPropertyValue('--cp-c-brand-1').trim()
|
|
48
|
+
if (raw.length === 0) {
|
|
49
|
+
return FALLBACK_BRAND
|
|
50
|
+
}
|
|
51
|
+
return raw
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Read the resolved `--cp-c-brand-3` CSS custom property (the deepest
|
|
56
|
+
* brand shade, used for the apple's shadow), falling back to the
|
|
57
|
+
* default theme's active shade when the var is empty.
|
|
58
|
+
*
|
|
59
|
+
* @private
|
|
60
|
+
* @param html - Document root element
|
|
61
|
+
* @returns Brand shadow colour as a CSS-parseable string
|
|
62
|
+
*/
|
|
63
|
+
function resolveBrandShadow(html: HTMLElement): string {
|
|
64
|
+
const raw = globalThis.window.getComputedStyle(html).getPropertyValue('--cp-c-brand-3').trim()
|
|
65
|
+
if (raw.length === 0) {
|
|
66
|
+
return FALLBACK_SHADOW
|
|
67
|
+
}
|
|
68
|
+
return raw
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Read the resolved canvas colour off the root element, falling back to
|
|
73
|
+
* the shared dark-surface canvas (`#0a0a0a`) when the var is empty.
|
|
74
|
+
*
|
|
75
|
+
* @private
|
|
76
|
+
* @param html - Document root element
|
|
77
|
+
* @returns Surface colour as a CSS-parseable string
|
|
78
|
+
*/
|
|
79
|
+
function resolveSurfaceColor(html: HTMLElement): string {
|
|
80
|
+
const raw = globalThis.window.getComputedStyle(html).getPropertyValue('--cp-c-bg').trim()
|
|
81
|
+
if (raw.length === 0) {
|
|
82
|
+
return FALLBACK_SURFACE
|
|
83
|
+
}
|
|
84
|
+
return raw
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Construct an SVG favicon data URI carrying the supplied brand +
|
|
89
|
+
* surface colours. Renders the pixel-apple mark (matching the static
|
|
90
|
+
* `/icon.svg` and the loader glyph) on a rounded square chip. Apple
|
|
91
|
+
* body uses the resolved brand colour; the body shadow uses the
|
|
92
|
+
* deepest brand shade; leaf greens and stem browns are constant.
|
|
93
|
+
*
|
|
94
|
+
* @private
|
|
95
|
+
* @param brand - Apple body colour
|
|
96
|
+
* @param shadow - Apple body shadow colour (deepest brand shade)
|
|
97
|
+
* @param surface - Chip background colour
|
|
98
|
+
* @returns `data:image/svg+xml;...` URI
|
|
99
|
+
*/
|
|
100
|
+
function buildIconDataUri(brand: string, shadow: string, surface: string): string {
|
|
101
|
+
// viewBox 0 0 64 64. Apple source content lives in (60..250, 40..260).
|
|
102
|
+
// translate + scale(0.25) places a 47.5x55 apple centred in the chip.
|
|
103
|
+
const svg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" shape-rendering="crispEdges"><rect width="64" height="64" rx="12" fill="${surface}"/><g transform="translate(8.25 4.5) scale(0.25) translate(-60 -40)"><path d="M80,40h10v10h-10v-10zM90,50h30v10h10v10h-30v-10h-10v-10z" fill="#99e550"/><path d="M90,40h30v10h-30v-10zM120,50h10v10h-10v-10zM130,60h10v10h-10v-10z" fill="#6abe30"/><path d="M120,40h20v10h10v20h-10v-10h-10v-10h-10v-10z" fill="#4b692f"/><path d="M160,40h20v10h-10v10h-10v10h-10v-20h10v-10z" fill="#d9a066"/><path d="M150,70h10v20h-10v-20z" fill="#8f563b"/><path d="M90,80h20v10h30v10h30v-10h30v-10h20v10h10v10h10v10h10v90h-10v20h-10v20h-10v10h-10v10h-30v-10h-10v-10h-10v-10h-10v10h-10v10h-10v10h-30v-10h-10v-10h-10v-20h-10v-20h-10v-90h10v-10h10v-10h10v-10zM220,200h10v-30h-10v-10h-10v40h-10v20h-10v20h10v-10h10v-10h10v-20z" fill="${brand}"/><path d="M110,80h30v10h-30v-10zM170,80h30v10h-30v-10zM140,90h30v10h-30v-10zM210,160h10v10h10v30h-10v20h-10v10h-10v10h-10v-20h10v-20h10v-40zM150,230h10v10h10v10h10v10h-50v-10h10v-10h10v-10z" fill="${shadow}"/></g></svg>`
|
|
104
|
+
return `data:image/svg+xml;utf8,${encodeURIComponent(svg)}`
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Locate the existing `<link rel="icon">` element, creating one if the
|
|
109
|
+
* document head doesn't have one yet (a defensive fallback — Rspress
|
|
110
|
+
* normally renders one from `config.icon`).
|
|
111
|
+
*
|
|
112
|
+
* @private
|
|
113
|
+
* @returns Mutable link element
|
|
114
|
+
*/
|
|
115
|
+
function ensureFaviconLink(): HTMLLinkElement {
|
|
116
|
+
const existing = globalThis.document.querySelector<HTMLLinkElement>('link[rel="icon"]')
|
|
117
|
+
if (existing !== null) {
|
|
118
|
+
return existing
|
|
119
|
+
}
|
|
120
|
+
const link = globalThis.document.createElement('link')
|
|
121
|
+
// oxlint-disable-next-line functional/immutable-data -- boundary mutation: initialising newly created link element
|
|
122
|
+
link.rel = 'icon'
|
|
123
|
+
globalThis.document.head.append(link)
|
|
124
|
+
return link
|
|
125
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fallback module re-exported by the `@ciderpress/internal/user-config` webpack
|
|
3
|
+
* alias when no bundleable `ciderpress.config.{ts,mts,cts,js,mjs,cjs}` exists at
|
|
4
|
+
* the standard location. Keeps the slot component's import resolvable so the
|
|
5
|
+
* site builds with zero config and the default `<CiderpressLogo />` renders.
|
|
6
|
+
*
|
|
7
|
+
* The slot component handles a missing or string `logo` field gracefully —
|
|
8
|
+
* this stub just provides the import target.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const userConfigStub = {}
|
|
12
|
+
export default userConfigStub
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ciderpress CSS cascade layer order.
|
|
3
|
+
*
|
|
4
|
+
* Declares the layer precedence for the entire ciderpress theme. Later layers in
|
|
5
|
+
* this list win against earlier ones in the cascade, regardless of source
|
|
6
|
+
* order or selector specificity.
|
|
7
|
+
*
|
|
8
|
+
* Layers (low → high precedence):
|
|
9
|
+
*
|
|
10
|
+
* ciderpress.reset — normalize / reset styles (reserved; not yet populated)
|
|
11
|
+
* ciderpress.tokens — design tokens (`--cp-*`, `--rp-*`) defined on :root
|
|
12
|
+
* ciderpress.theme — theme palettes (`[data-cp-theme=*]` scoped colors)
|
|
13
|
+
* ciderpress.components — component styles (`.cp-*` classes for theme components)
|
|
14
|
+
* ciderpress.overrides — structural overrides targeting Rspress (`.rp-*`)
|
|
15
|
+
* user — PUBLIC override slot for downstream consumers
|
|
16
|
+
*
|
|
17
|
+
* The `user` layer is intentionally the highest-precedence named layer. End
|
|
18
|
+
* users can author rules inside `@layer user { ... }` to override any ciderpress
|
|
19
|
+
* style — including component styles — without `!important`.
|
|
20
|
+
*
|
|
21
|
+
* Example (in a downstream project's CSS):
|
|
22
|
+
*
|
|
23
|
+
* @layer user {
|
|
24
|
+
* .rp-home-hero__text { font-size: 3rem; }
|
|
25
|
+
* }
|
|
26
|
+
*
|
|
27
|
+
* Unlayered styles (those not wrapped in any `@layer`) still win against
|
|
28
|
+
* every layer above, so component CSS files that are not yet migrated to a
|
|
29
|
+
* layer continue to work as before.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
@layer ciderpress.reset, ciderpress.tokens, ciderpress.theme, ciderpress.components, ciderpress.overrides, user;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Badge — inline badge row for shields.io / GitHub status badges.
|
|
3
|
+
*
|
|
4
|
+
* Usage (in markdown):
|
|
5
|
+
* <span class="cp-badge">
|
|
6
|
+
* [](https://example.com)
|
|
7
|
+
* [](https://npmjs.com/package/pkg)
|
|
8
|
+
* </span>
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
.cp-badge {
|
|
12
|
+
display: inline-flex;
|
|
13
|
+
gap: 4px;
|
|
14
|
+
flex-wrap: wrap;
|
|
15
|
+
align-items: center;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.cp-badge p {
|
|
19
|
+
margin: 0;
|
|
20
|
+
padding: 0;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.cp-badge img {
|
|
24
|
+
display: inline-block;
|
|
25
|
+
vertical-align: middle;
|
|
26
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content footer — feedback widget + meta-actions block portalled into
|
|
3
|
+
* Rspress's `.rp-doc-footer` so they live INSIDE the doc rail at the
|
|
4
|
+
* reading width. Sits above Rspress's built-in `.rp-prev-next-page`
|
|
5
|
+
* pager (which we restyle below to match the approved mockup).
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/* ── Portal wrapper — sits at the top of `.rp-doc-footer` ── */
|
|
9
|
+
html .rp-doc-footer .cp-content-footer {
|
|
10
|
+
margin-top: 32px;
|
|
11
|
+
padding-top: 24px;
|
|
12
|
+
border-top: 1px solid var(--cp-c-border);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* Rspress occasionally renders an empty `.rp-doc-footer__edit` row.
|
|
16
|
+
Hide it so we don't get a phantom 0-height divider before our content. */
|
|
17
|
+
html .rp-doc-footer__edit:empty {
|
|
18
|
+
display: none;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* ── Restyle Rspress's prev/next pager to match the mockup ── */
|
|
22
|
+
html .rp-prev-next-page {
|
|
23
|
+
display: grid;
|
|
24
|
+
grid-template-columns: 1fr 1fr;
|
|
25
|
+
gap: 12px;
|
|
26
|
+
margin-top: 24px;
|
|
27
|
+
padding-top: 0;
|
|
28
|
+
border-top: 0;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
html .rp-prev-next-page__item {
|
|
32
|
+
display: flex;
|
|
33
|
+
flex-direction: column;
|
|
34
|
+
gap: 4px;
|
|
35
|
+
padding: 14px 16px;
|
|
36
|
+
border: 1px solid var(--cp-c-border);
|
|
37
|
+
border-radius: var(--cp-radius-card);
|
|
38
|
+
background: var(--cp-c-bg-soft);
|
|
39
|
+
text-decoration: none;
|
|
40
|
+
transition:
|
|
41
|
+
border-color 0.15s ease,
|
|
42
|
+
background 0.15s ease;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
html .rp-prev-next-page__item:hover {
|
|
46
|
+
border-color: var(--cp-c-border);
|
|
47
|
+
background: var(--cp-c-bg-elv);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
html .rp-prev-next-page__item--next,
|
|
51
|
+
html .rp-prev-next-page__next {
|
|
52
|
+
align-items: flex-end;
|
|
53
|
+
text-align: right;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
html .rp-prev-next-page__item__desc {
|
|
57
|
+
font-family: var(--cp-font-family-mono);
|
|
58
|
+
font-size: 11px;
|
|
59
|
+
color: var(--cp-c-text-3);
|
|
60
|
+
text-transform: uppercase;
|
|
61
|
+
letter-spacing: 0.04em;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
html .rp-prev-next-page__item__title {
|
|
65
|
+
display: inline-flex;
|
|
66
|
+
align-items: center;
|
|
67
|
+
gap: 6px;
|
|
68
|
+
font-size: 14px;
|
|
69
|
+
font-weight: 500;
|
|
70
|
+
color: var(--cp-c-text-1);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* Chevron icons Rspress injects inside the title — size them down and
|
|
74
|
+
mute their color so they read as subtle direction indicators. */
|
|
75
|
+
html .rp-prev-next-page__icon {
|
|
76
|
+
width: 12px;
|
|
77
|
+
height: 12px;
|
|
78
|
+
color: var(--cp-c-text-3);
|
|
79
|
+
flex-shrink: 0;
|
|
80
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <details> accordion styling.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
details {
|
|
6
|
+
border: 1px solid var(--cp-c-border);
|
|
7
|
+
border-radius: 8px;
|
|
8
|
+
padding: 0;
|
|
9
|
+
margin: 0;
|
|
10
|
+
background: var(--cp-c-bg-soft);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
details summary {
|
|
14
|
+
cursor: pointer;
|
|
15
|
+
padding: 0 12px;
|
|
16
|
+
font-weight: 600;
|
|
17
|
+
font-size: 14px;
|
|
18
|
+
color: var(--cp-c-text-1);
|
|
19
|
+
list-style: none;
|
|
20
|
+
display: flex;
|
|
21
|
+
align-items: center;
|
|
22
|
+
gap: 8px;
|
|
23
|
+
user-select: none;
|
|
24
|
+
transition: color 0.2s;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
details summary:hover {
|
|
28
|
+
color: var(--cp-c-brand-1);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
details summary::-webkit-details-marker {
|
|
32
|
+
display: none;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
details summary::before {
|
|
36
|
+
content: '';
|
|
37
|
+
display: inline-block;
|
|
38
|
+
width: 0;
|
|
39
|
+
height: 0;
|
|
40
|
+
border-left: 5px solid currentColor;
|
|
41
|
+
border-top: 4px solid transparent;
|
|
42
|
+
border-bottom: 4px solid transparent;
|
|
43
|
+
transition: transform 0.2s;
|
|
44
|
+
flex-shrink: 0;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
details[open] summary::before {
|
|
48
|
+
transform: rotate(90deg);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
details[open] summary {
|
|
52
|
+
border-bottom: none;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
details > :not(summary) {
|
|
56
|
+
padding: 0 12px;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
details > :last-child:not(summary) {
|
|
60
|
+
padding-bottom: 6px;
|
|
61
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Self-hosted Geist fonts (vercel/geist-font).
|
|
3
|
+
*
|
|
4
|
+
* `Geist` is the base sans-serif (used everywhere by default).
|
|
5
|
+
* `Geist Pixel Square` is a decorative pixel font kept available via
|
|
6
|
+
* `--cp-font-family-pixel` for the brand mark and any opt-in surfaces.
|
|
7
|
+
* `Geist Mono` is used for code, eyebrow labels, status pills, etc.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
@font-face {
|
|
11
|
+
font-family: 'Geist';
|
|
12
|
+
src: url('../../fonts/GeistSans-Variable.woff2') format('woff2');
|
|
13
|
+
font-weight: 100 900;
|
|
14
|
+
font-style: normal;
|
|
15
|
+
font-display: swap;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@font-face {
|
|
19
|
+
font-family: 'Geist Pixel Square';
|
|
20
|
+
src: url('../../fonts/GeistPixel-Square.woff2') format('woff2');
|
|
21
|
+
font-weight: 400;
|
|
22
|
+
font-style: normal;
|
|
23
|
+
font-display: swap;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@font-face {
|
|
27
|
+
font-family: 'Geist Mono';
|
|
28
|
+
src: url('../../fonts/GeistMono-Variable.woff2') format('woff2');
|
|
29
|
+
font-weight: 100 900;
|
|
30
|
+
font-style: normal;
|
|
31
|
+
font-display: swap;
|
|
32
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared base card — container, hover, icon system, and divider.
|
|
3
|
+
* Consumed by feature-card.css and workspace-card.css.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/* ── Base card container ─────────────────────────────────────── */
|
|
7
|
+
.cp-card {
|
|
8
|
+
padding: 16px 18px;
|
|
9
|
+
border-radius: var(--rp-radius);
|
|
10
|
+
border: 1px solid var(--cp-c-border);
|
|
11
|
+
background: var(--cp-c-bg-soft);
|
|
12
|
+
text-decoration: none !important;
|
|
13
|
+
transition:
|
|
14
|
+
border-color 0.2s,
|
|
15
|
+
background 0.2s,
|
|
16
|
+
box-shadow 0.2s;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.cp-card:hover {
|
|
20
|
+
border-color: var(--cp-c-brand-1);
|
|
21
|
+
background: var(--cp-c-bg-elv);
|
|
22
|
+
box-shadow: var(--cp-shadow-card-hover);
|
|
23
|
+
text-decoration: none !important;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.cp-card--clickable {
|
|
27
|
+
cursor: pointer;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* ── Shared icon box (36×36, 4px radius, 18px SVG) ───────────── */
|
|
31
|
+
.cp-card__icon {
|
|
32
|
+
display: flex;
|
|
33
|
+
align-items: center;
|
|
34
|
+
justify-content: center;
|
|
35
|
+
width: 36px;
|
|
36
|
+
height: 36px;
|
|
37
|
+
border-radius: 4px;
|
|
38
|
+
flex-shrink: 0;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.cp-card__icon svg {
|
|
42
|
+
width: 18px;
|
|
43
|
+
height: 18px;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* ── Icon color variants ─────────────────────────────────────── */
|
|
47
|
+
.cp-card__icon--purple {
|
|
48
|
+
background: var(--cp-c-tint-purple-bg);
|
|
49
|
+
color: var(--cp-c-tint-purple-fg);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.cp-card__icon--purple svg {
|
|
53
|
+
color: var(--cp-c-tint-purple-fg);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.cp-card__icon--blue {
|
|
57
|
+
background: var(--cp-c-tint-blue-bg);
|
|
58
|
+
color: var(--cp-c-tint-blue-fg);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.cp-card__icon--blue svg {
|
|
62
|
+
color: var(--cp-c-tint-blue-fg);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.cp-card__icon--green {
|
|
66
|
+
background: var(--cp-c-tint-green-bg);
|
|
67
|
+
color: var(--cp-c-tint-green-fg);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.cp-card__icon--green svg {
|
|
71
|
+
color: var(--cp-c-tint-green-fg);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.cp-card__icon--amber {
|
|
75
|
+
background: var(--cp-c-tint-amber-bg);
|
|
76
|
+
color: var(--cp-c-tint-amber-fg);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.cp-card__icon--amber svg {
|
|
80
|
+
color: var(--cp-c-tint-amber-fg);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.cp-card__icon--red {
|
|
84
|
+
background: var(--cp-c-tint-red-bg);
|
|
85
|
+
color: var(--cp-c-tint-red-fg);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.cp-card__icon--red svg {
|
|
89
|
+
color: var(--cp-c-tint-red-fg);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.cp-card__icon--slate {
|
|
93
|
+
background: var(--cp-c-tint-slate-bg);
|
|
94
|
+
color: var(--cp-c-tint-slate-fg);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.cp-card__icon--slate svg {
|
|
98
|
+
color: var(--cp-c-tint-slate-fg);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.cp-card__icon--cyan {
|
|
102
|
+
background: var(--cp-c-tint-cyan-bg);
|
|
103
|
+
color: var(--cp-c-tint-cyan-fg);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.cp-card__icon--cyan svg {
|
|
107
|
+
color: var(--cp-c-tint-cyan-fg);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.cp-card__icon--pink {
|
|
111
|
+
background: var(--cp-c-tint-pink-bg);
|
|
112
|
+
color: var(--cp-c-tint-pink-fg);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.cp-card__icon--pink svg {
|
|
116
|
+
color: var(--cp-c-tint-pink-fg);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* ── Divider between features and workspaces ─────────────────── */
|
|
120
|
+
.cp-divider {
|
|
121
|
+
max-width: 1152px;
|
|
122
|
+
margin: 0 auto 48px;
|
|
123
|
+
padding: 0;
|
|
124
|
+
border: none;
|
|
125
|
+
border-top: 1px solid var(--cp-c-divider);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@media (max-width: 1184px) {
|
|
129
|
+
.cp-divider {
|
|
130
|
+
padding-left: 16px;
|
|
131
|
+
padding-right: 16px;
|
|
132
|
+
}
|
|
133
|
+
}
|