@goldencomm/create-baseline 0.0.1 → 0.1.0
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/README.md +18 -79
- package/index.mjs +175 -283
- package/package.json +13 -30
- package/templates/ci/bitbucket-pipelines.yml +29 -0
- package/templates/code-connect/accordion-item.figma.ts +45 -0
- package/templates/code-connect/accordion.figma.ts +40 -0
- package/templates/code-connect/alert.figma.ts +378 -0
- package/templates/code-connect/avatar-badge.figma.ts +14 -0
- package/templates/code-connect/avatar-group-count.figma.ts +16 -0
- package/templates/code-connect/avatar-group.figma.ts +30 -0
- package/templates/code-connect/avatar.figma.ts +34 -0
- package/templates/code-connect/badge.figma.ts +383 -0
- package/templates/code-connect/breadcrumb-item.figma.ts +23 -0
- package/templates/code-connect/breadcrumb-separator.figma.ts +12 -0
- package/templates/code-connect/breadcrumb.figma.ts +32 -0
- package/templates/code-connect/button-group.figma.ts +28 -0
- package/templates/code-connect/button.figma.ts +408 -0
- package/templates/code-connect/card.figma.ts +74 -0
- package/templates/code-connect/carousel.figma.ts +27 -0
- package/templates/code-connect/checkbox.figma.ts +34 -0
- package/templates/code-connect/columns-1.figma.ts +43 -0
- package/templates/code-connect/columns-2.figma.ts +49 -0
- package/templates/code-connect/columns-3.figma.ts +45 -0
- package/templates/code-connect/columns-4.figma.ts +46 -0
- package/templates/code-connect/container.figma.ts +42 -0
- package/templates/code-connect/dialog.figma.ts +72 -0
- package/templates/code-connect/drawer.figma.ts +69 -0
- package/templates/code-connect/dropdown-menu-checkbox-item.figma.ts +19 -0
- package/templates/code-connect/dropdown-menu-item.figma.ts +25 -0
- package/templates/code-connect/dropdown-menu-label.figma.ts +16 -0
- package/templates/code-connect/dropdown-menu-radio-item.figma.ts +19 -0
- package/templates/code-connect/dropdown-menu-separator.figma.ts +12 -0
- package/templates/code-connect/dropdown-menu-sub-trigger.figma.ts +22 -0
- package/templates/code-connect/dropdown-menu.figma.ts +44 -0
- package/templates/code-connect/field-horizontal.figma.ts +73 -0
- package/templates/code-connect/field.figma.ts +68 -0
- package/templates/code-connect/hover-card.figma.ts +41 -0
- package/templates/code-connect/icon-button.figma.ts +382 -0
- package/templates/code-connect/input-group.figma.ts +51 -0
- package/templates/code-connect/input-otp.figma.ts +40 -0
- package/templates/code-connect/input.figma.ts +42 -0
- package/templates/code-connect/item-group.figma.ts +30 -0
- package/templates/code-connect/item.figma.ts +50 -0
- package/templates/code-connect/kbd.figma.ts +16 -0
- package/templates/code-connect/media.figma.ts +35 -0
- package/templates/code-connect/meter.figma.ts +31 -0
- package/templates/code-connect/native-select.figma.ts +36 -0
- package/templates/code-connect/navigation-menu-link.figma.ts +33 -0
- package/templates/code-connect/navigation-menu-trigger.figma.ts +28 -0
- package/templates/code-connect/navigation-menu.figma.ts +30 -0
- package/templates/code-connect/pagination-ellipsis.figma.ts +11 -0
- package/templates/code-connect/pagination-link.figma.ts +24 -0
- package/templates/code-connect/pagination-next.figma.ts +17 -0
- package/templates/code-connect/pagination-previous.figma.ts +17 -0
- package/templates/code-connect/pagination.figma.ts +33 -0
- package/templates/code-connect/panel.figma.ts +40 -0
- package/templates/code-connect/popover.figma.ts +58 -0
- package/templates/code-connect/progress.figma.ts +34 -0
- package/templates/code-connect/radio.figma.ts +29 -0
- package/templates/code-connect/section.figma.ts +42 -0
- package/templates/code-connect/select.figma.ts +30 -0
- package/templates/code-connect/sheet.figma.ts +70 -0
- package/templates/code-connect/sidebar-menu-button.figma.ts +36 -0
- package/templates/code-connect/sidebar.figma.ts +44 -0
- package/templates/code-connect/spinner.figma.ts +13 -0
- package/templates/code-connect/switch.figma.ts +32 -0
- package/templates/code-connect/table-cell.figma.ts +21 -0
- package/templates/code-connect/table.figma.ts +62 -0
- package/templates/code-connect/tabs-trigger.figma.ts +369 -0
- package/templates/code-connect/tabs.figma.ts +28 -0
- package/templates/code-connect/textarea.figma.ts +32 -0
- package/templates/code-connect/toggle-group.figma.ts +24 -0
- package/templates/code-connect/toggle.figma.ts +385 -0
- package/templates/code-connect/tooltip.figma.ts +29 -0
- package/templates/next/app/globals.css +13 -12
- package/templates/next/app/page.tsx +38 -26
- package/templates/next/public/placeholder.svg +1 -0
- package/templates/shopify/.gitattributes +1 -0
- package/templates/shopify/.shopifyignore +23 -0
- package/templates/shopify/.theme-check.yml +1 -0
- package/templates/shopify/CODE_OF_CONDUCT.md +132 -0
- package/templates/shopify/CONTRIBUTING.md +24 -0
- package/templates/shopify/LICENSE.md +9 -0
- package/templates/shopify/README.md +160 -0
- package/templates/shopify/assets/carousel.js +2 -0
- package/templates/shopify/assets/critical.css +117 -0
- package/templates/shopify/assets/icon-account.svg +6 -0
- package/templates/shopify/assets/icon-cart.svg +5 -0
- package/templates/shopify/assets/predictive-search.js +65 -0
- package/templates/shopify/assets/shoppy-x-ray.svg +1 -0
- package/templates/shopify/blocks/_accordion-item.liquid +44 -0
- package/templates/shopify/blocks/_card-footer.liquid +26 -0
- package/templates/shopify/blocks/_carousel-slide.liquid +21 -0
- package/templates/shopify/blocks/_column.liquid +30 -0
- package/templates/shopify/blocks/_dialog-footer.liquid +28 -0
- package/templates/shopify/blocks/_sheet-footer.liquid +28 -0
- package/templates/shopify/blocks/_tab.liquid +21 -0
- package/templates/shopify/blocks/accordion.liquid +40 -0
- package/templates/shopify/blocks/blog-posts.liquid +70 -0
- package/templates/shopify/blocks/button.figma.ts +359 -0
- package/templates/shopify/blocks/button.liquid +477 -0
- package/templates/shopify/blocks/card.liquid +73 -0
- package/templates/shopify/blocks/carousel.liquid +47 -0
- package/templates/shopify/blocks/columns.liquid +73 -0
- package/templates/shopify/blocks/contact-form.liquid +69 -0
- package/templates/shopify/blocks/container.liquid +29 -0
- package/templates/shopify/blocks/dialog.liquid +77 -0
- package/templates/shopify/blocks/group.liquid +105 -0
- package/templates/shopify/blocks/heading.liquid +57 -0
- package/templates/shopify/blocks/icon-button.figma.ts +358 -0
- package/templates/shopify/blocks/media.liquid +80 -0
- package/templates/shopify/blocks/navigation-menu.liquid +23 -0
- package/templates/shopify/blocks/panel.liquid +64 -0
- package/templates/shopify/blocks/popover.liquid +88 -0
- package/templates/shopify/blocks/section-heading.liquid +68 -0
- package/templates/shopify/blocks/sheet.liquid +90 -0
- package/templates/shopify/blocks/tabs.liquid +58 -0
- package/templates/shopify/blocks/text.liquid +59 -0
- package/templates/shopify/build-js.mjs +22 -0
- package/templates/shopify/config/settings_data.json +182 -0
- package/templates/shopify/config/settings_schema.json +365 -0
- package/templates/shopify/layout/password.liquid +19 -0
- package/templates/shopify/layout/theme.liquid +57 -0
- package/templates/shopify/locales/en.default.json +58 -0
- package/templates/shopify/locales/en.default.schema.json +303 -0
- package/templates/shopify/package-lock.json +521 -0
- package/templates/shopify/package.json +17 -0
- package/templates/shopify/sections/404.liquid +23 -0
- package/templates/shopify/sections/article.liquid +81 -0
- package/templates/shopify/sections/baseline-header.liquid +236 -0
- package/templates/shopify/sections/baseline-kitchen-sink.liquid +988 -0
- package/templates/shopify/sections/baseline-section.liquid +661 -0
- package/templates/shopify/sections/blog.liquid +36 -0
- package/templates/shopify/sections/cart.liquid +65 -0
- package/templates/shopify/sections/collection.liquid +54 -0
- package/templates/shopify/sections/collections.liquid +83 -0
- package/templates/shopify/sections/custom-section.liquid +60 -0
- package/templates/shopify/sections/footer-group.json +25 -0
- package/templates/shopify/sections/footer.liquid +57 -0
- package/templates/shopify/sections/header-group.json +22 -0
- package/templates/shopify/sections/page.liquid +18 -0
- package/templates/shopify/sections/password.liquid +36 -0
- package/templates/shopify/sections/product.liquid +60 -0
- package/templates/shopify/sections/search.liquid +73 -0
- package/templates/shopify/snippets/accordion-item.figma.ts +34 -0
- package/templates/shopify/snippets/accordion-item.liquid +36 -0
- package/templates/shopify/snippets/accordion.figma.ts +37 -0
- package/templates/shopify/snippets/accordion.liquid +169 -0
- package/templates/shopify/snippets/alert.figma.ts +31 -0
- package/templates/shopify/snippets/alert.liquid +104 -0
- package/templates/shopify/snippets/avatar-group.figma.ts +17 -0
- package/templates/shopify/snippets/avatar-group.liquid +66 -0
- package/templates/shopify/snippets/avatar.figma.ts +24 -0
- package/templates/shopify/snippets/avatar.liquid +143 -0
- package/templates/shopify/snippets/badge.figma.ts +355 -0
- package/templates/shopify/snippets/badge.liquid +111 -0
- package/templates/shopify/snippets/baseline-schemes.liquid +44 -0
- package/templates/shopify/snippets/baseline-tokens.liquid +712 -0
- package/templates/shopify/snippets/breadcrumb.figma.ts +12 -0
- package/templates/shopify/snippets/breadcrumb.liquid +124 -0
- package/templates/shopify/snippets/button-group.liquid +148 -0
- package/templates/shopify/snippets/button.liquid +144 -0
- package/templates/shopify/snippets/card.figma.ts +43 -0
- package/templates/shopify/snippets/card.liquid +196 -0
- package/templates/shopify/snippets/carousel-item.liquid +18 -0
- package/templates/shopify/snippets/carousel.figma.ts +28 -0
- package/templates/shopify/snippets/carousel.liquid +121 -0
- package/templates/shopify/snippets/checkbox.liquid +147 -0
- package/templates/shopify/snippets/container.liquid +52 -0
- package/templates/shopify/snippets/css-variables.liquid +18 -0
- package/templates/shopify/snippets/dialog.figma.ts +36 -0
- package/templates/shopify/snippets/dialog.liquid +217 -0
- package/templates/shopify/snippets/field-separator.liquid +68 -0
- package/templates/shopify/snippets/field.liquid +187 -0
- package/templates/shopify/snippets/icon.liquid +101 -0
- package/templates/shopify/snippets/image.liquid +64 -0
- package/templates/shopify/snippets/input-group.liquid +196 -0
- package/templates/shopify/snippets/input.liquid +126 -0
- package/templates/shopify/snippets/item-group.liquid +31 -0
- package/templates/shopify/snippets/item.figma.ts +40 -0
- package/templates/shopify/snippets/item.liquid +162 -0
- package/templates/shopify/snippets/media.figma.ts +33 -0
- package/templates/shopify/snippets/media.liquid +273 -0
- package/templates/shopify/snippets/meta-tags.liquid +105 -0
- package/templates/shopify/snippets/meter.figma.ts +24 -0
- package/templates/shopify/snippets/meter.liquid +118 -0
- package/templates/shopify/snippets/native-select.liquid +141 -0
- package/templates/shopify/snippets/navigation-menu-item.figma.ts +23 -0
- package/templates/shopify/snippets/navigation-menu-item.liquid +40 -0
- package/templates/shopify/snippets/navigation-menu-link.figma.ts +27 -0
- package/templates/shopify/snippets/navigation-menu-link.liquid +31 -0
- package/templates/shopify/snippets/navigation-menu.figma.ts +12 -0
- package/templates/shopify/snippets/navigation-menu.liquid +300 -0
- package/templates/shopify/snippets/pagination.figma.ts +13 -0
- package/templates/shopify/snippets/pagination.liquid +208 -0
- package/templates/shopify/snippets/popover.figma.ts +41 -0
- package/templates/shopify/snippets/popover.liquid +203 -0
- package/templates/shopify/snippets/progress.figma.ts +26 -0
- package/templates/shopify/snippets/progress.liquid +114 -0
- package/templates/shopify/snippets/radio.liquid +145 -0
- package/templates/shopify/snippets/sheet.figma.ts +37 -0
- package/templates/shopify/snippets/sheet.liquid +197 -0
- package/templates/shopify/snippets/sidebar-menu-item.liquid +34 -0
- package/templates/shopify/snippets/sidebar-menu-sub-link.liquid +17 -0
- package/templates/shopify/snippets/sidebar-menu.liquid +139 -0
- package/templates/shopify/snippets/spinner.liquid +42 -0
- package/templates/shopify/snippets/switch.liquid +180 -0
- package/templates/shopify/snippets/tab.figma.ts +353 -0
- package/templates/shopify/snippets/tab.liquid +33 -0
- package/templates/shopify/snippets/tabs.figma.ts +21 -0
- package/templates/shopify/snippets/tabs.liquid +260 -0
- package/templates/shopify/snippets/text-styles.liquid +45 -0
- package/templates/shopify/snippets/textarea.liquid +103 -0
- package/templates/shopify/snippets/toggle-group.figma.ts +30 -0
- package/templates/shopify/snippets/toggle-group.liquid +46 -0
- package/templates/shopify/snippets/toggle.figma.ts +357 -0
- package/templates/shopify/snippets/toggle.liquid +104 -0
- package/templates/shopify/snippets/typeset.liquid +498 -0
- package/templates/shopify/src/carousel.js +94 -0
- package/templates/shopify/templates/404.json +20 -0
- package/templates/shopify/templates/article.json +20 -0
- package/templates/shopify/templates/blog.json +20 -0
- package/templates/shopify/templates/cart.json +20 -0
- package/templates/shopify/templates/collection.json +20 -0
- package/templates/shopify/templates/gift_card.liquid +73 -0
- package/templates/shopify/templates/index.json +18 -0
- package/templates/shopify/templates/list-collections.json +20 -0
- package/templates/shopify/templates/page.json +20 -0
- package/templates/shopify/templates/password.json +21 -0
- package/templates/shopify/templates/product.json +20 -0
- package/templates/shopify/templates/search.json +20 -0
- package/templates/skills/baseline-client-tokens/SKILL.md +74 -0
- package/templates/wordpress/.ddev/commands/web/seed +258 -3
- package/templates/wordpress/.ddev/config.yaml +10 -7
- package/templates/wordpress/.ddev/seed/gravityforms-contact.json +1 -0
- package/templates/wordpress/README.md +37 -39
- package/templates/wordpress/auth.json.example +1 -1
- package/templates/wordpress/composer.json +88 -84
- package/templates/wordpress/theme/README.md +3 -0
- package/templates/wordpress/theme/acf-json/.gitkeep +0 -0
- package/templates/wordpress/theme/acf-json/group_baseline_alert.json +83 -0
- package/templates/wordpress/theme/acf-json/group_baseline_avatar.json +82 -0
- package/templates/wordpress/theme/acf-json/group_baseline_avatar_group.json +35 -0
- package/templates/wordpress/theme/acf-json/group_baseline_badge.json +93 -0
- package/templates/wordpress/theme/acf-json/group_baseline_carousel.json +21 -0
- package/templates/wordpress/theme/acf-json/group_baseline_carousel_slide.json +16 -0
- package/templates/wordpress/theme/acf-json/group_baseline_dialog.json +68 -0
- package/templates/wordpress/theme/acf-json/group_baseline_dialog_footer.json +23 -0
- package/templates/wordpress/theme/acf-json/group_baseline_item.json +101 -0
- package/templates/wordpress/theme/acf-json/group_baseline_item_group.json +26 -0
- package/templates/wordpress/theme/acf-json/group_baseline_sheet.json +104 -0
- package/templates/wordpress/theme/acf-json/group_baseline_sheet_footer.json +31 -0
- package/templates/wordpress/theme/assets/app.css +2 -0
- package/templates/wordpress/theme/assets/editor.css +2 -0
- package/templates/wordpress/theme/assets/images/placeholder.svg +1 -0
- package/templates/wordpress/theme/assets/js/carousel-editor.js +85 -0
- package/templates/wordpress/theme/assets/js/carousel.js +2 -0
- package/templates/wordpress/theme/assets/js/core-button-editor.js +243 -0
- package/templates/wordpress/theme/assets/js/core-layout-editor.js +144 -0
- package/templates/wordpress/theme/assets/js/core-navigation.js +11 -0
- package/templates/wordpress/theme/assets/js/media-editor.js +52 -0
- package/templates/wordpress/theme/assets/js/media.js +38 -0
- package/templates/wordpress/theme/assets/tokens.css +1030 -0
- package/templates/wordpress/theme/blocks/alert/alert.figma.ts +32 -0
- package/templates/wordpress/theme/blocks/alert/block.json +24 -0
- package/templates/wordpress/theme/blocks/alert/render.php +30 -0
- package/templates/wordpress/theme/blocks/avatar/block.json +24 -0
- package/templates/wordpress/theme/blocks/avatar/render.php +35 -0
- package/templates/wordpress/theme/blocks/avatar-group/avatar-group.figma.ts +16 -0
- package/templates/wordpress/theme/blocks/avatar-group/block.json +25 -0
- package/templates/wordpress/theme/blocks/avatar-group/render.php +27 -0
- package/templates/wordpress/theme/blocks/badge/badge.figma.ts +349 -0
- package/templates/wordpress/theme/blocks/badge/block.json +23 -0
- package/templates/wordpress/theme/blocks/badge/render.php +28 -0
- package/templates/wordpress/theme/blocks/carousel/block.json +25 -0
- package/templates/wordpress/theme/blocks/carousel/carousel.figma.ts +22 -0
- package/templates/wordpress/theme/blocks/carousel/render.php +54 -0
- package/templates/wordpress/theme/blocks/carousel-slide/block.json +24 -0
- package/templates/wordpress/theme/blocks/carousel-slide/render.php +13 -0
- package/templates/wordpress/theme/blocks/dialog/block.json +24 -0
- package/templates/wordpress/theme/blocks/dialog/dialog.figma.ts +36 -0
- package/templates/wordpress/theme/blocks/dialog/render.php +41 -0
- package/templates/wordpress/theme/blocks/dialog-footer/block.json +25 -0
- package/templates/wordpress/theme/blocks/dialog-footer/render.php +18 -0
- package/templates/wordpress/theme/blocks/item/block.json +25 -0
- package/templates/wordpress/theme/blocks/item/item.figma.ts +43 -0
- package/templates/wordpress/theme/blocks/item/render.php +38 -0
- package/templates/wordpress/theme/blocks/item-group/block.json +25 -0
- package/templates/wordpress/theme/blocks/item-group/item-group.figma.ts +28 -0
- package/templates/wordpress/theme/blocks/item-group/render.php +22 -0
- package/templates/wordpress/theme/blocks/sheet/block.json +24 -0
- package/templates/wordpress/theme/blocks/sheet/render.php +39 -0
- package/templates/wordpress/theme/blocks/sheet/sheet.figma.ts +38 -0
- package/templates/wordpress/theme/blocks/sheet-footer/block.json +25 -0
- package/templates/wordpress/theme/blocks/sheet-footer/render.php +18 -0
- package/templates/wordpress/theme/build-js.mjs +22 -0
- package/templates/wordpress/theme/code-connect/accordion-item.figma.ts +47 -0
- package/templates/wordpress/theme/code-connect/accordion.figma.ts +37 -0
- package/templates/wordpress/theme/code-connect/avatar.figma.ts +25 -0
- package/templates/wordpress/theme/code-connect/breadcrumb.figma.ts +12 -0
- package/templates/wordpress/theme/code-connect/button.figma.ts +360 -0
- package/templates/wordpress/theme/code-connect/card.figma.ts +45 -0
- package/templates/wordpress/theme/code-connect/icon-button.figma.ts +359 -0
- package/templates/wordpress/theme/code-connect/navigation-menu.figma.ts +20 -0
- package/templates/wordpress/theme/code-connect/pagination.figma.ts +17 -0
- package/templates/wordpress/theme/code-connect/popover.figma.ts +42 -0
- package/templates/wordpress/theme/code-connect/tabs.figma.ts +32 -0
- package/templates/wordpress/theme/code-connect/toggle-group.figma.ts +34 -0
- package/templates/wordpress/theme/code-connect/toggle.figma.ts +356 -0
- package/templates/wordpress/theme/composer.json +7 -0
- package/templates/wordpress/theme/footer.php +4 -0
- package/templates/wordpress/theme/functions.php +86 -0
- package/templates/wordpress/theme/header.php +17 -0
- package/templates/wordpress/theme/inc/acf.php +13 -0
- package/templates/wordpress/theme/inc/blocks.php +41 -0
- package/templates/wordpress/theme/inc/carousel.php +36 -0
- package/templates/wordpress/theme/inc/components/alert.php +83 -0
- package/templates/wordpress/theme/inc/components/avatar.php +111 -0
- package/templates/wordpress/theme/inc/components/badge.php +96 -0
- package/templates/wordpress/theme/inc/components/button.php +77 -0
- package/templates/wordpress/theme/inc/components/dialog.php +98 -0
- package/templates/wordpress/theme/inc/components/item.php +111 -0
- package/templates/wordpress/theme/inc/components/popover.php +125 -0
- package/templates/wordpress/theme/inc/components/sheet.php +88 -0
- package/templates/wordpress/theme/inc/components/toggle.php +127 -0
- package/templates/wordpress/theme/inc/core-button.php +96 -0
- package/templates/wordpress/theme/inc/core-card.php +30 -0
- package/templates/wordpress/theme/inc/core-layout.php +76 -0
- package/templates/wordpress/theme/inc/core-navigation.php +31 -0
- package/templates/wordpress/theme/inc/core-pagination.php +87 -0
- package/templates/wordpress/theme/inc/header.php +39 -0
- package/templates/wordpress/theme/inc/icons.generated.php +94 -0
- package/templates/wordpress/theme/inc/icons.php +70 -0
- package/templates/wordpress/theme/inc/looks.generated.php +18 -0
- package/templates/wordpress/theme/inc/media.php +183 -0
- package/templates/wordpress/theme/inc/sections.php +16 -0
- package/templates/wordpress/theme/index.php +24 -0
- package/templates/wordpress/theme/package-lock.json +1637 -0
- package/templates/wordpress/theme/package.json +23 -0
- package/templates/wordpress/theme/parts/header.html +23 -0
- package/templates/wordpress/theme/patterns/blog-card-grid.php +41 -0
- package/templates/wordpress/theme/patterns/card.php +46 -0
- package/templates/wordpress/theme/patterns/contact-centered.php +22 -0
- package/templates/wordpress/theme/patterns/cta-left.php +25 -0
- package/templates/wordpress/theme/patterns/faq-centered.php +36 -0
- package/templates/wordpress/theme/patterns/header-inline.php +33 -0
- package/templates/wordpress/theme/patterns/header-stacked.php +25 -0
- package/templates/wordpress/theme/patterns/hero-centered.php +28 -0
- package/templates/wordpress/theme/patterns/hero-split.php +41 -0
- package/templates/wordpress/theme/patterns/section.php +28 -0
- package/templates/wordpress/theme/src/app.css +45 -0
- package/templates/wordpress/theme/src/carousel.css +93 -0
- package/templates/wordpress/theme/src/carousel.js +94 -0
- package/templates/wordpress/theme/src/checkbox.css +102 -0
- package/templates/wordpress/theme/src/core-accordion.css +158 -0
- package/templates/wordpress/theme/src/core-avatar.css +68 -0
- package/templates/wordpress/theme/src/core-breadcrumbs.css +124 -0
- package/templates/wordpress/theme/src/core-button-editor.css +45 -0
- package/templates/wordpress/theme/src/core-button.css +155 -0
- package/templates/wordpress/theme/src/core-card.css +157 -0
- package/templates/wordpress/theme/src/core-layout.css +73 -0
- package/templates/wordpress/theme/src/core-navigation.css +290 -0
- package/templates/wordpress/theme/src/core-pagination.css +112 -0
- package/templates/wordpress/theme/src/core-table.css +88 -0
- package/templates/wordpress/theme/src/core-tabs.css +86 -0
- package/templates/wordpress/theme/src/dialog.css +29 -0
- package/templates/wordpress/theme/src/editor.css +65 -0
- package/templates/wordpress/theme/src/field.css +95 -0
- package/templates/wordpress/theme/src/fonts.css +3 -0
- package/templates/wordpress/theme/src/gravityforms.css +919 -0
- package/templates/wordpress/theme/src/header.css +80 -0
- package/templates/wordpress/theme/src/icons.generated.css +16 -0
- package/templates/wordpress/theme/src/input-group.css +105 -0
- package/templates/wordpress/theme/src/input.css +116 -0
- package/templates/wordpress/theme/src/item.css +7 -0
- package/templates/wordpress/theme/src/looks.generated.css +358 -0
- package/templates/wordpress/theme/src/media.css +160 -0
- package/templates/wordpress/theme/src/radio.css +88 -0
- package/templates/wordpress/theme/src/sections.css +80 -0
- package/templates/wordpress/theme/src/sheet.css +24 -0
- package/templates/wordpress/theme/src/switch.css +120 -0
- package/templates/wordpress/theme/src/text-styles.css +44 -0
- package/templates/wordpress/theme/src/textarea.css +61 -0
- package/templates/wordpress/theme/src/toggle-group.css +28 -0
- package/templates/wordpress/theme/src/typeset.css +510 -0
- package/templates/wordpress/theme/style.css +13 -0
- package/templates/wordpress/theme/theme.json +362 -0
- package/templates/wordpress/web/wp-config.php +38 -0
- package/templates/wordpress/wp-cli.yml +1 -0
- package/templates/next/.claude/skills/ai-elements/SKILL.md +0 -160
- package/templates/next/.claude/skills/ai-elements/references/agent.md +0 -134
- package/templates/next/.claude/skills/ai-elements/references/artifact.md +0 -84
- package/templates/next/.claude/skills/ai-elements/references/attachments.md +0 -190
- package/templates/next/.claude/skills/ai-elements/references/audio-player.md +0 -134
- package/templates/next/.claude/skills/ai-elements/references/canvas.md +0 -34
- package/templates/next/.claude/skills/ai-elements/references/chain-of-thought.md +0 -81
- package/templates/next/.claude/skills/ai-elements/references/checkpoint.md +0 -183
- package/templates/next/.claude/skills/ai-elements/references/code-block.md +0 -170
- package/templates/next/.claude/skills/ai-elements/references/commit.md +0 -177
- package/templates/next/.claude/skills/ai-elements/references/confirmation.md +0 -262
- package/templates/next/.claude/skills/ai-elements/references/connection.md +0 -34
- package/templates/next/.claude/skills/ai-elements/references/context.md +0 -126
- package/templates/next/.claude/skills/ai-elements/references/controls.md +0 -32
- package/templates/next/.claude/skills/ai-elements/references/conversation.md +0 -224
- package/templates/next/.claude/skills/ai-elements/references/edge.md +0 -52
- package/templates/next/.claude/skills/ai-elements/references/environment-variables.md +0 -102
- package/templates/next/.claude/skills/ai-elements/references/file-tree.md +0 -72
- package/templates/next/.claude/skills/ai-elements/references/image.md +0 -146
- package/templates/next/.claude/skills/ai-elements/references/inline-citation.md +0 -299
- package/templates/next/.claude/skills/ai-elements/references/jsx-preview.md +0 -104
- package/templates/next/.claude/skills/ai-elements/references/message.md +0 -237
- package/templates/next/.claude/skills/ai-elements/references/mic-selector.md +0 -189
- package/templates/next/.claude/skills/ai-elements/references/model-selector.md +0 -112
- package/templates/next/.claude/skills/ai-elements/references/node.md +0 -73
- package/templates/next/.claude/skills/ai-elements/references/open-in-chat.md +0 -67
- package/templates/next/.claude/skills/ai-elements/references/package-info.md +0 -95
- package/templates/next/.claude/skills/ai-elements/references/panel.md +0 -33
- package/templates/next/.claude/skills/ai-elements/references/persona.md +0 -166
- package/templates/next/.claude/skills/ai-elements/references/plan.md +0 -79
- package/templates/next/.claude/skills/ai-elements/references/prompt-input.md +0 -579
- package/templates/next/.claude/skills/ai-elements/references/queue.md +0 -172
- package/templates/next/.claude/skills/ai-elements/references/reasoning.md +0 -238
- package/templates/next/.claude/skills/ai-elements/references/sandbox.md +0 -129
- package/templates/next/.claude/skills/ai-elements/references/schema-display.md +0 -102
- package/templates/next/.claude/skills/ai-elements/references/shimmer.md +0 -48
- package/templates/next/.claude/skills/ai-elements/references/snippet.md +0 -64
- package/templates/next/.claude/skills/ai-elements/references/sources.md +0 -209
- package/templates/next/.claude/skills/ai-elements/references/speech-input.md +0 -163
- package/templates/next/.claude/skills/ai-elements/references/stack-trace.md +0 -224
- package/templates/next/.claude/skills/ai-elements/references/suggestion.md +0 -124
- package/templates/next/.claude/skills/ai-elements/references/task.md +0 -222
- package/templates/next/.claude/skills/ai-elements/references/terminal.md +0 -103
- package/templates/next/.claude/skills/ai-elements/references/test-results.md +0 -157
- package/templates/next/.claude/skills/ai-elements/references/tool.md +0 -285
- package/templates/next/.claude/skills/ai-elements/references/toolbar.md +0 -32
- package/templates/next/.claude/skills/ai-elements/references/transcription.md +0 -120
- package/templates/next/.claude/skills/ai-elements/references/voice-selector.md +0 -241
- package/templates/next/.claude/skills/ai-elements/references/web-preview.md +0 -200
- package/templates/next/.claude/skills/ai-elements/scripts/agent.tsx +0 -61
- package/templates/next/.claude/skills/ai-elements/scripts/artifact.tsx +0 -127
- package/templates/next/.claude/skills/ai-elements/scripts/attachments-inline.tsx +0 -128
- package/templates/next/.claude/skills/ai-elements/scripts/attachments-list.tsx +0 -95
- package/templates/next/.claude/skills/ai-elements/scripts/attachments.tsx +0 -85
- package/templates/next/.claude/skills/ai-elements/scripts/audio-player-remote.tsx +0 -35
- package/templates/next/.claude/skills/ai-elements/scripts/audio-player.tsx +0 -68
- package/templates/next/.claude/skills/ai-elements/scripts/chain-of-thought.tsx +0 -82
- package/templates/next/.claude/skills/ai-elements/scripts/checkpoint.tsx +0 -110
- package/templates/next/.claude/skills/ai-elements/scripts/code-block-dark.tsx +0 -46
- package/templates/next/.claude/skills/ai-elements/scripts/code-block.tsx +0 -120
- package/templates/next/.claude/skills/ai-elements/scripts/commit.tsx +0 -94
- package/templates/next/.claude/skills/ai-elements/scripts/confirmation-accepted.tsx +0 -40
- package/templates/next/.claude/skills/ai-elements/scripts/confirmation-rejected.tsx +0 -40
- package/templates/next/.claude/skills/ai-elements/scripts/confirmation-request.tsx +0 -54
- package/templates/next/.claude/skills/ai-elements/scripts/confirmation.tsx +0 -55
- package/templates/next/.claude/skills/ai-elements/scripts/context.tsx +0 -45
- package/templates/next/.claude/skills/ai-elements/scripts/conversation.tsx +0 -177
- package/templates/next/.claude/skills/ai-elements/scripts/environment-variables.tsx +0 -62
- package/templates/next/.claude/skills/ai-elements/scripts/file-tree-basic.tsx +0 -18
- package/templates/next/.claude/skills/ai-elements/scripts/file-tree-expanded.tsx +0 -21
- package/templates/next/.claude/skills/ai-elements/scripts/file-tree-selection.tsx +0 -24
- package/templates/next/.claude/skills/ai-elements/scripts/file-tree.tsx +0 -42
- package/templates/next/.claude/skills/ai-elements/scripts/image.tsx +0 -20
- package/templates/next/.claude/skills/ai-elements/scripts/inline-citation.tsx +0 -97
- package/templates/next/.claude/skills/ai-elements/scripts/jsx-preview.tsx +0 -104
- package/templates/next/.claude/skills/ai-elements/scripts/message.tsx +0 -365
- package/templates/next/.claude/skills/ai-elements/scripts/mic-selector.tsx +0 -49
- package/templates/next/.claude/skills/ai-elements/scripts/model-selector.tsx +0 -365
- package/templates/next/.claude/skills/ai-elements/scripts/open-in-chat.tsx +0 -33
- package/templates/next/.claude/skills/ai-elements/scripts/package-info.tsx +0 -51
- package/templates/next/.claude/skills/ai-elements/scripts/persona-command.tsx +0 -110
- package/templates/next/.claude/skills/ai-elements/scripts/persona-glint.tsx +0 -110
- package/templates/next/.claude/skills/ai-elements/scripts/persona-halo.tsx +0 -110
- package/templates/next/.claude/skills/ai-elements/scripts/persona-mana.tsx +0 -110
- package/templates/next/.claude/skills/ai-elements/scripts/persona-obsidian.tsx +0 -110
- package/templates/next/.claude/skills/ai-elements/scripts/persona-opal.tsx +0 -110
- package/templates/next/.claude/skills/ai-elements/scripts/plan.tsx +0 -65
- package/templates/next/.claude/skills/ai-elements/scripts/prompt-input-cursor.tsx +0 -502
- package/templates/next/.claude/skills/ai-elements/scripts/prompt-input-tooltip.tsx +0 -44
- package/templates/next/.claude/skills/ai-elements/scripts/prompt-input.tsx +0 -267
- package/templates/next/.claude/skills/ai-elements/scripts/queue-prompt-input.tsx +0 -394
- package/templates/next/.claude/skills/ai-elements/scripts/queue.tsx +0 -295
- package/templates/next/.claude/skills/ai-elements/scripts/reasoning.tsx +0 -71
- package/templates/next/.claude/skills/ai-elements/scripts/sandbox.tsx +0 -178
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display-basic.tsx +0 -9
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display-body.tsx +0 -20
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display-nested.tsx +0 -23
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display-params.tsx +0 -16
- package/templates/next/.claude/skills/ai-elements/scripts/schema-display.tsx +0 -110
- package/templates/next/.claude/skills/ai-elements/scripts/shimmer-duration.tsx +0 -31
- package/templates/next/.claude/skills/ai-elements/scripts/shimmer-elements.tsx +0 -43
- package/templates/next/.claude/skills/ai-elements/scripts/shimmer.tsx +0 -17
- package/templates/next/.claude/skills/ai-elements/scripts/snippet-plain.tsx +0 -19
- package/templates/next/.claude/skills/ai-elements/scripts/snippet.tsx +0 -25
- package/templates/next/.claude/skills/ai-elements/scripts/sources-custom.tsx +0 -39
- package/templates/next/.claude/skills/ai-elements/scripts/sources.tsx +0 -32
- package/templates/next/.claude/skills/ai-elements/scripts/speech-input.tsx +0 -84
- package/templates/next/.claude/skills/ai-elements/scripts/stack-trace-collapsed.tsx +0 -39
- package/templates/next/.claude/skills/ai-elements/scripts/stack-trace-no-internal.tsx +0 -41
- package/templates/next/.claude/skills/ai-elements/scripts/stack-trace.tsx +0 -58
- package/templates/next/.claude/skills/ai-elements/scripts/suggestion-input.tsx +0 -144
- package/templates/next/.claude/skills/ai-elements/scripts/suggestion.tsx +0 -32
- package/templates/next/.claude/skills/ai-elements/scripts/task.tsx +0 -59
- package/templates/next/.claude/skills/ai-elements/scripts/terminal-basic.tsx +0 -7
- package/templates/next/.claude/skills/ai-elements/scripts/terminal-clear.tsx +0 -19
- package/templates/next/.claude/skills/ai-elements/scripts/terminal-streaming.tsx +0 -38
- package/templates/next/.claude/skills/ai-elements/scripts/terminal.tsx +0 -82
- package/templates/next/.claude/skills/ai-elements/scripts/test-results-basic.tsx +0 -27
- package/templates/next/.claude/skills/ai-elements/scripts/test-results-errors.tsx +0 -51
- package/templates/next/.claude/skills/ai-elements/scripts/test-results-suites.tsx +0 -40
- package/templates/next/.claude/skills/ai-elements/scripts/test-results.tsx +0 -102
- package/templates/next/.claude/skills/ai-elements/scripts/tool-input-available.tsx +0 -31
- package/templates/next/.claude/skills/ai-elements/scripts/tool-input-streaming.tsx +0 -30
- package/templates/next/.claude/skills/ai-elements/scripts/tool-output-available.tsx +0 -80
- package/templates/next/.claude/skills/ai-elements/scripts/tool-output-error.tsx +0 -44
- package/templates/next/.claude/skills/ai-elements/scripts/tool.tsx +0 -222
- package/templates/next/.claude/skills/ai-elements/scripts/transcription.tsx +0 -290
- package/templates/next/.claude/skills/ai-elements/scripts/voice-selector.tsx +0 -245
- package/templates/next/.claude/skills/ai-elements/scripts/web-preview.tsx +0 -115
- package/templates/next/.claude/skills/ai-sdk/SKILL.md +0 -78
- package/templates/next/.claude/skills/frontend-design/LICENSE.txt +0 -177
- package/templates/next/.claude/skills/frontend-design/SKILL.md +0 -55
- package/templates/next/.claude/skills/gc-implement-figma-page/SKILL.md +0 -93
- package/templates/next/.claude/skills/migrate-ai-sdk-v6-to-v7/SKILL.md +0 -108
- package/templates/next/.claude/skills/vercel-composition-patterns/AGENTS.md +0 -946
- package/templates/next/.claude/skills/vercel-composition-patterns/README.md +0 -60
- package/templates/next/.claude/skills/vercel-composition-patterns/SKILL.md +0 -89
- package/templates/next/.claude/skills/vercel-composition-patterns/metadata.json +0 -11
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/_sections.md +0 -29
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/_template.md +0 -24
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +0 -100
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/architecture-compound-components.md +0 -112
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +0 -87
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +0 -100
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/react19-no-forwardref.md +0 -42
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-context-interface.md +0 -191
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-decouple-implementation.md +0 -113
- package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-lift-state.md +0 -125
- package/templates/next/.claude/skills/vercel-react-best-practices/AGENTS.md +0 -3810
- package/templates/next/.claude/skills/vercel-react-best-practices/README.md +0 -123
- package/templates/next/.claude/skills/vercel-react-best-practices/SKILL.md +0 -149
- package/templates/next/.claude/skills/vercel-react-best-practices/metadata.json +0 -15
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/_sections.md +0 -46
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/_template.md +0 -28
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +0 -56
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -38
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +0 -37
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -82
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -51
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +0 -28
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md +0 -63
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -60
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -50
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -50
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +0 -60
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -37
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +0 -105
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -26
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +0 -85
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +0 -68
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -44
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +0 -82
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +0 -64
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +0 -59
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -76
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +0 -149
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +0 -50
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +0 -34
- package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +0 -38
- package/templates/next/.claude/skills/web-design-guidelines/SKILL.md +0 -39
- package/templates/next/CLAUDE.md +0 -42
- package/templates/next/README.md +0 -30
- package/templates/next/_gitignore +0 -4
- package/templates/next/app/layout.tsx +0 -44
- package/templates/next/globals.d.ts +0 -8
- package/templates/next/next.config.mjs +0 -6
- package/templates/next/package.json +0 -38
- package/templates/next/postcss.config.mjs +0 -5
- package/templates/next/skills-lock.json +0 -47
- package/templates/next/tsconfig.json +0 -36
- package/templates/shopify-theme/.claude/skills/gc-shopify-block/SKILL.md +0 -44
- package/templates/shopify-theme/.claude/skills/shopify-dev/SKILL.md +0 -51
- package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/log_skill_use.mjs +0 -205
- package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/search_docs.mjs +0 -272
- package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/track-telemetry.ps1 +0 -361
- package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/track-telemetry.sh +0 -527
- package/templates/shopify-theme/.claude/skills/shopify-liquid/SKILL.md +0 -343
- package/templates/shopify-theme/.claude/skills/shopify-liquid/blocks/hero-slide.liquid +0 -342
- package/templates/shopify-theme/.claude/skills/shopify-liquid/config/settings_schema.json +0 -1
- package/templates/shopify-theme/.claude/skills/shopify-liquid/featured-collection.liquid +0 -457
- package/templates/shopify-theme/.claude/skills/shopify-liquid/locales/en.default.json +0 -10
- package/templates/shopify-theme/.claude/skills/shopify-liquid/locales/en.default.schema.json +0 -103
- package/templates/shopify-theme/.claude/skills/shopify-liquid/package.json +0 -10
- package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/search_docs.mjs +0 -759
- package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/track-telemetry.ps1 +0 -361
- package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/track-telemetry.sh +0 -527
- package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/validate.mjs +0 -654
- package/templates/shopify-theme/.claude/skills/shopify-liquid/sections/hero-banner.liquid +0 -329
- package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/SKILL.md +0 -165
- package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/log_skill_use.mjs +0 -205
- package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/track-telemetry.ps1 +0 -361
- package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/track-telemetry.sh +0 -527
- package/templates/shopify-theme/.shopifyignore +0 -9
- package/templates/shopify-theme/CLAUDE.md +0 -51
- package/templates/shopify-theme/README.md +0 -92
- package/templates/shopify-theme/assets/baseline.css +0 -8390
- package/templates/shopify-theme/assets/swiper-element-bundle.min.js +0 -14
- package/templates/shopify-theme/blocks/_accordion.liquid +0 -59
- package/templates/shopify-theme/blocks/_carousel-slide.liquid +0 -24
- package/templates/shopify-theme/blocks/_modal-body.liquid +0 -18
- package/templates/shopify-theme/blocks/_modal-footer.liquid +0 -36
- package/templates/shopify-theme/blocks/_modal-header.liquid +0 -19
- package/templates/shopify-theme/blocks/_modal-media.liquid +0 -37
- package/templates/shopify-theme/blocks/accordion-group.liquid +0 -53
- package/templates/shopify-theme/blocks/alert.liquid +0 -92
- package/templates/shopify-theme/blocks/avatar-group.liquid +0 -51
- package/templates/shopify-theme/blocks/avatar.liquid +0 -56
- package/templates/shopify-theme/blocks/badge.liquid +0 -33
- package/templates/shopify-theme/blocks/breadcrumb.liquid +0 -45
- package/templates/shopify-theme/blocks/button.liquid +0 -51
- package/templates/shopify-theme/blocks/buttons.liquid +0 -41
- package/templates/shopify-theme/blocks/card.liquid +0 -67
- package/templates/shopify-theme/blocks/carousel.liquid +0 -55
- package/templates/shopify-theme/blocks/column.liquid +0 -33
- package/templates/shopify-theme/blocks/image.liquid +0 -37
- package/templates/shopify-theme/blocks/modal.liquid +0 -52
- package/templates/shopify-theme/blocks/popover.liquid +0 -24
- package/templates/shopify-theme/blocks/skeleton.liquid +0 -22
- package/templates/shopify-theme/blocks/spinner.liquid +0 -22
- package/templates/shopify-theme/blocks/split.liquid +0 -39
- package/templates/shopify-theme/blocks/tab.liquid +0 -19
- package/templates/shopify-theme/blocks/tabs.liquid +0 -78
- package/templates/shopify-theme/blocks/tags.liquid +0 -55
- package/templates/shopify-theme/blocks/text.liquid +0 -55
- package/templates/shopify-theme/blocks/tooltip.liquid +0 -50
- package/templates/shopify-theme/blocks/typography.liquid +0 -90
- package/templates/shopify-theme/config/settings_data.json +0 -4
- package/templates/shopify-theme/config/settings_schema.json +0 -10
- package/templates/shopify-theme/layout/theme.liquid +0 -21
- package/templates/shopify-theme/locales/en.default.json +0 -5
- package/templates/shopify-theme/locales/en.default.schema.json +0 -131
- package/templates/shopify-theme/package.json +0 -21
- package/templates/shopify-theme/scripts/sync-tokens.mjs +0 -32
- package/templates/shopify-theme/sections/baseline-components.liquid +0 -81
- package/templates/shopify-theme/skills-lock.json +0 -23
- package/templates/shopify-theme/snippets/lucide.liquid +0 -34
- package/templates/shopify-theme/snippets/pagination.liquid +0 -44
- package/templates/shopify-theme/templates/collection.json +0 -13
- package/templates/shopify-theme/templates/gift_card.liquid +0 -5
- package/templates/shopify-theme/templates/index.json +0 -135
- package/templates/shopify-theme/templates/list-collections.json +0 -13
- package/templates/shopify-theme/templates/product.json +0 -13
- package/templates/wordpress/.claude/CLAUDE.md +0 -37
- package/templates/wordpress/.claude/skills/wp-block-development/SKILL.md +0 -174
- package/templates/wordpress/.claude/skills/wp-block-development/references/attributes-and-serialization.md +0 -22
- package/templates/wordpress/.claude/skills/wp-block-development/references/block-json.md +0 -49
- package/templates/wordpress/.claude/skills/wp-block-development/references/creating-new-blocks.md +0 -46
- package/templates/wordpress/.claude/skills/wp-block-development/references/debugging.md +0 -36
- package/templates/wordpress/.claude/skills/wp-block-development/references/deprecations.md +0 -24
- package/templates/wordpress/.claude/skills/wp-block-development/references/dynamic-rendering.md +0 -23
- package/templates/wordpress/.claude/skills/wp-block-development/references/inner-blocks.md +0 -25
- package/templates/wordpress/.claude/skills/wp-block-development/references/registration.md +0 -30
- package/templates/wordpress/.claude/skills/wp-block-development/references/supports-and-wrappers.md +0 -18
- package/templates/wordpress/.claude/skills/wp-block-development/references/tooling-and-testing.md +0 -21
- package/templates/wordpress/.claude/skills/wp-block-development/scripts/list_blocks.mjs +0 -121
- package/templates/wordpress/.claude/skills/wp-block-themes/SKILL.md +0 -116
- package/templates/wordpress/.claude/skills/wp-block-themes/references/creating-new-block-theme.md +0 -37
- package/templates/wordpress/.claude/skills/wp-block-themes/references/debugging.md +0 -24
- package/templates/wordpress/.claude/skills/wp-block-themes/references/patterns.md +0 -18
- package/templates/wordpress/.claude/skills/wp-block-themes/references/style-variations.md +0 -14
- package/templates/wordpress/.claude/skills/wp-block-themes/references/templates-and-parts.md +0 -16
- package/templates/wordpress/.claude/skills/wp-block-themes/references/theme-json.md +0 -59
- package/templates/wordpress/.claude/skills/wp-block-themes/scripts/detect_block_themes.mjs +0 -117
- package/templates/wordpress/.claude/skills/wp-performance/SKILL.md +0 -146
- package/templates/wordpress/.claude/skills/wp-performance/references/autoload-options.md +0 -24
- package/templates/wordpress/.claude/skills/wp-performance/references/cron.md +0 -20
- package/templates/wordpress/.claude/skills/wp-performance/references/database.md +0 -20
- package/templates/wordpress/.claude/skills/wp-performance/references/http-api.md +0 -15
- package/templates/wordpress/.claude/skills/wp-performance/references/measurement.md +0 -21
- package/templates/wordpress/.claude/skills/wp-performance/references/object-cache.md +0 -24
- package/templates/wordpress/.claude/skills/wp-performance/references/query-monitor-headless.md +0 -38
- package/templates/wordpress/.claude/skills/wp-performance/references/server-timing.md +0 -22
- package/templates/wordpress/.claude/skills/wp-performance/references/wp-cli-doctor.md +0 -24
- package/templates/wordpress/.claude/skills/wp-performance/references/wp-cli-profile.md +0 -32
- package/templates/wordpress/.claude/skills/wp-performance/scripts/perf_inspect.mjs +0 -128
- package/templates/wordpress/.claude/skills/wp-plugin-development/SKILL.md +0 -112
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/data-and-cron.md +0 -19
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/debugging.md +0 -19
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/lifecycle.md +0 -33
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/security.md +0 -29
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/settings-api.md +0 -22
- package/templates/wordpress/.claude/skills/wp-plugin-development/references/structure.md +0 -16
- package/templates/wordpress/.claude/skills/wp-plugin-development/scripts/detect_plugins.mjs +0 -122
- package/templates/wordpress/.claude/skills/wp-rest-api/SKILL.md +0 -114
- package/templates/wordpress/.claude/skills/wp-rest-api/references/authentication.md +0 -18
- package/templates/wordpress/.claude/skills/wp-rest-api/references/custom-content-types.md +0 -20
- package/templates/wordpress/.claude/skills/wp-rest-api/references/discovery-and-params.md +0 -20
- package/templates/wordpress/.claude/skills/wp-rest-api/references/responses-and-fields.md +0 -30
- package/templates/wordpress/.claude/skills/wp-rest-api/references/routes-and-endpoints.md +0 -36
- package/templates/wordpress/.claude/skills/wp-rest-api/references/schema.md +0 -22
- package/templates/wordpress/.ddev/docker-compose.packages.yaml +0 -14
- package/templates/wordpress/.ddev/docker-compose.redis.yaml +0 -11
- package/templates/wordpress/.env.example +0 -33
- package/templates/wordpress/CLAUDE.md +0 -34
- package/templates/wordpress/_gitignore +0 -33
- package/templates/wordpress/composer.lock +0 -1594
- package/templates/wordpress/package.json +0 -13
- package/templates/wordpress/scripts/seed.sh +0 -64
- package/templates/wordpress/skills-lock.json +0 -35
- package/templates/wordpress/wp-config.php +0 -89
- package/templates/wordpress/wp-content/index.php +0 -2
- package/templates/wordpress/wp-content/mu-plugins/baseline-bootstrap.php +0 -26
|
@@ -0,0 +1,919 @@
|
|
|
1
|
+
/* Gravity Forms (theme framework / Orbital) buttons follow the Baseline button (spec: components/button/spec.md).
|
|
2
|
+
Gravity Forms' stylesheet is unlayered, so it would beat Tailwind's layered utilities on its own selectors; the
|
|
3
|
+
supported override path is the CSS API (--gf-* custom properties), which we set to Baseline tokens. This file is
|
|
4
|
+
imported unlayered into app.css and editor.css. Reference: https://docs.css.gravity.com/ (controls > button).
|
|
5
|
+
|
|
6
|
+
Every block that sets --gf-* variables carries `:is(#bl-gform, .gform_wrapper)`. Gravity Forms prints a <style> per
|
|
7
|
+
form, keyed on the form's id (`#gform_wrapper_1[data-form-index="0"].gform-theme`, specificity 1,2,0), which sets
|
|
8
|
+
the same variables from the form's style settings (its primary colour, a gray secondary border ...), and an id
|
|
9
|
+
beats any number of classes. `:is()` takes the specificity of its strongest argument whether or not that argument
|
|
10
|
+
matches, so the never-present #bl-gform lifts these blocks to (1,3,0) while .gform_wrapper does the matching
|
|
11
|
+
(found 2026-10-01: Previous kept GF's #686e77 border on a #f5f5f5 fill). */
|
|
12
|
+
|
|
13
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) {
|
|
14
|
+
/* geometry: the button/* component tokens (ADR-0017); GF's xl reuses lg */
|
|
15
|
+
--gf-ctrl-btn-radius: var(--bl-button-md-radius);
|
|
16
|
+
--gf-ctrl-btn-shadow: none;
|
|
17
|
+
--gf-ctrl-btn-shadow-hover: none;
|
|
18
|
+
--gf-ctrl-btn-shadow-focus: 0 0 0 var(--bl-control-ring-width) var(--ring);
|
|
19
|
+
/* GF also draws a focus OUTLINE on buttons and controls (3px of its primary at 65 %, offset 1px) over the ring above;
|
|
20
|
+
Baseline's ring is the box-shadow alone, as on core/button, so the outline goes (found 2026-10-01) */
|
|
21
|
+
--gf-ctrl-outline-width-focus: 0;
|
|
22
|
+
--gf-ctrl-outline-color-focus: transparent;
|
|
23
|
+
--gf-ctrl-btn-shadow-disabled: none;
|
|
24
|
+
--gf-ctrl-btn-opacity-disabled: 0.5;
|
|
25
|
+
--gf-ctrl-btn-size-xs: var(--bl-button-xs-height);
|
|
26
|
+
--gf-ctrl-btn-size-sm: var(--bl-button-sm-height);
|
|
27
|
+
--gf-ctrl-btn-size-md: var(--bl-button-md-height);
|
|
28
|
+
--gf-ctrl-btn-size-lg: var(--bl-button-lg-height);
|
|
29
|
+
--gf-ctrl-btn-size-xl: var(--bl-button-lg-height);
|
|
30
|
+
--gf-ctrl-btn-padding-x-xs: var(--bl-button-xs-padding-x);
|
|
31
|
+
--gf-ctrl-btn-padding-x-sm: var(--bl-button-sm-padding-x);
|
|
32
|
+
--gf-ctrl-btn-padding-x-md: var(--bl-button-md-padding-x);
|
|
33
|
+
--gf-ctrl-btn-padding-x-lg: var(--bl-button-lg-padding-x);
|
|
34
|
+
--gf-ctrl-btn-padding-x-xl: var(--bl-button-lg-padding-x);
|
|
35
|
+
--gf-ctrl-btn-padding-y: 0;
|
|
36
|
+
--gf-ctrl-btn-font-family: var(--bl-button-font-family);
|
|
37
|
+
--gf-ctrl-btn-font-size-xs: var(--bl-button-xs-font-size);
|
|
38
|
+
--gf-ctrl-btn-font-size-sm: var(--bl-button-sm-font-size);
|
|
39
|
+
--gf-ctrl-btn-font-size-md: var(--bl-button-md-font-size);
|
|
40
|
+
--gf-ctrl-btn-font-size-lg: var(--bl-button-lg-font-size);
|
|
41
|
+
--gf-ctrl-btn-font-size-xl: var(--bl-button-lg-font-size);
|
|
42
|
+
--gf-ctrl-btn-font-weight: var(--bl-button-font-weight);
|
|
43
|
+
--gf-ctrl-btn-line-height: var(--bl-button-md-line-height);
|
|
44
|
+
--gf-ctrl-btn-letter-spacing: normal;
|
|
45
|
+
--gf-ctrl-btn-icon-gap: var(--bl-button-md-gap);
|
|
46
|
+
|
|
47
|
+
/* primary = Baseline `default` variant (hover: primary at 90%, shadcn) */
|
|
48
|
+
--gf-ctrl-btn-bg-color-primary: var(--primary);
|
|
49
|
+
--gf-ctrl-btn-bg-color-hover-primary: color-mix(in oklab, var(--primary) 90%, transparent);
|
|
50
|
+
--gf-ctrl-btn-bg-color-focus-primary: var(--primary);
|
|
51
|
+
--gf-ctrl-btn-bg-color-disabled-primary: var(--primary);
|
|
52
|
+
--gf-ctrl-btn-border-color-primary: transparent;
|
|
53
|
+
--gf-ctrl-btn-border-color-hover-primary: transparent;
|
|
54
|
+
--gf-ctrl-btn-border-color-focus-primary: transparent;
|
|
55
|
+
--gf-ctrl-btn-border-color-disabled-primary: transparent;
|
|
56
|
+
--gf-ctrl-btn-color-primary: var(--primary-foreground);
|
|
57
|
+
--gf-ctrl-btn-color-hover-primary: var(--primary-foreground);
|
|
58
|
+
--gf-ctrl-btn-icon-color-primary: var(--primary-foreground);
|
|
59
|
+
|
|
60
|
+
/* secondary (Previous, Save & Continue) = Baseline `secondary` variant (hover: 80%) */
|
|
61
|
+
--gf-ctrl-btn-bg-color-secondary: var(--secondary);
|
|
62
|
+
--gf-ctrl-btn-bg-color-hover-secondary: color-mix(in oklab, var(--secondary) 80%, transparent);
|
|
63
|
+
--gf-ctrl-btn-bg-color-focus-secondary: var(--secondary);
|
|
64
|
+
--gf-ctrl-btn-bg-color-disabled-secondary: var(--secondary);
|
|
65
|
+
--gf-ctrl-btn-border-color-secondary: transparent;
|
|
66
|
+
--gf-ctrl-btn-border-color-hover-secondary: transparent;
|
|
67
|
+
--gf-ctrl-btn-border-color-focus-secondary: transparent;
|
|
68
|
+
--gf-ctrl-btn-border-color-disabled-secondary: transparent;
|
|
69
|
+
--gf-ctrl-btn-color-secondary: var(--secondary-foreground);
|
|
70
|
+
--gf-ctrl-btn-color-hover-secondary: var(--secondary-foreground);
|
|
71
|
+
--gf-ctrl-btn-icon-color-secondary: var(--secondary-foreground);
|
|
72
|
+
|
|
73
|
+
/* simple (text-only links) = Baseline `link` variant */
|
|
74
|
+
--gf-ctrl-btn-color-simple: var(--primary);
|
|
75
|
+
--gf-ctrl-btn-color-hover-simple: var(--primary);
|
|
76
|
+
--gf-ctrl-btn-icon-color-simple: var(--primary);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* ---------------------------------------------------------------------------------------------------------
|
|
80
|
+
Text controls (spec: components/input/spec.md). Most real client inputs are Gravity Forms fields, so Input
|
|
81
|
+
is only half-implemented on WordPress until these match the theme's own controls exactly.
|
|
82
|
+
|
|
83
|
+
Read from the installed plugin (Gravity Forms 3.1.2,
|
|
84
|
+
`assets/css/dist/gravity-forms-theme-framework.min.css`) rather than guessed:
|
|
85
|
+
|
|
86
|
+
- GF paints a control with `border: var(--gf-ctrl-border-width) var(--gf-ctrl-border-style)
|
|
87
|
+
var(--gf-local-border-color)`, where the local property is assigned per state from the global
|
|
88
|
+
`--gf-ctrl-border-color*` family. So overriding the globals is the right lever.
|
|
89
|
+
- The globals are declared exactly once, on `.gform-theme--api,.gform-theme--framework` (specificity 0,1,0).
|
|
90
|
+
- Hover is real: a rule sets `--gf-local-border-color: var(--gf-ctrl-border-color-hover)`, which is why a
|
|
91
|
+
hover colour change appears unless that global is overridden too.
|
|
92
|
+
|
|
93
|
+
Two things this file does about it.
|
|
94
|
+
|
|
95
|
+
(1) The CSS API, the supported override path, for everything GF drives through variables.
|
|
96
|
+
(2) Explicit declarations on the controls themselves, so the border does not depend on the variable chain
|
|
97
|
+
resolving. GF's own paint rules reach 0,3,1, so the wrapper class is repeated to sit above them without
|
|
98
|
+
`!important`.
|
|
99
|
+
|
|
100
|
+
Both are scoped to `.gform_wrapper` rather than to `.gform-theme--framework`, because **which theme a form
|
|
101
|
+
uses is a per-form setting** (theme framework, the 2.5 `gravity-theme`, or legacy) and the wrapper classes
|
|
102
|
+
differ for each. Scoping to the framework class styled only some forms, which is the likeliest reason the
|
|
103
|
+
first attempt did not take effect on a real form.
|
|
104
|
+
|
|
105
|
+
Still unverified against a running form: DDEV is not reachable from this shell. If a border still looks
|
|
106
|
+
wrong, the decisive evidence is the wrapper's class list and which rule wins in the inspector.
|
|
107
|
+
--------------------------------------------------------------------------------------------------------- */
|
|
108
|
+
|
|
109
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) {
|
|
110
|
+
/* box: Baseline controls are transparent and take their colour from the scheme behind them */
|
|
111
|
+
--gf-ctrl-bg-color: transparent;
|
|
112
|
+
--gf-ctrl-bg-color-hover: transparent;
|
|
113
|
+
--gf-ctrl-bg-color-focus: transparent;
|
|
114
|
+
--gf-ctrl-bg-color-error: transparent;
|
|
115
|
+
--gf-ctrl-bg-color-disabled: transparent;
|
|
116
|
+
|
|
117
|
+
--gf-ctrl-border-width: var(--bl-input-md-border-width);
|
|
118
|
+
--gf-ctrl-radius: var(--bl-input-md-radius);
|
|
119
|
+
--gf-ctrl-border-color: var(--input);
|
|
120
|
+
--gf-ctrl-border-color-hover: var(--input); /* Baseline controls have no hover state */
|
|
121
|
+
--gf-ctrl-border-color-focus: var(--primary);
|
|
122
|
+
--gf-ctrl-border-color-error: var(--destructive);
|
|
123
|
+
--gf-ctrl-border-color-disabled: var(--input);
|
|
124
|
+
--gf-ctrl-shadow: none;
|
|
125
|
+
|
|
126
|
+
/* text: invalid colours the value destructive, matching the component and the Figma set */
|
|
127
|
+
--gf-ctrl-color: var(--foreground);
|
|
128
|
+
--gf-ctrl-color-hover: var(--foreground);
|
|
129
|
+
--gf-ctrl-color-focus: var(--foreground);
|
|
130
|
+
--gf-ctrl-color-error: var(--destructive);
|
|
131
|
+
--gf-ctrl-placeholder-color: var(--muted-foreground);
|
|
132
|
+
|
|
133
|
+
/* GF has no opacity hook for disabled, so the 50% Baseline look is mixed into the colours it does expose */
|
|
134
|
+
--gf-ctrl-color-disabled: color-mix(in oklab, var(--foreground) 50%, transparent);
|
|
135
|
+
|
|
136
|
+
/* size: Baseline Input has exactly one size, so all four GF control sizes resolve to it rather than invent
|
|
137
|
+
heights the design system does not define. When Input gains sizes these point at input/<size>/height.
|
|
138
|
+
control/height/* stays Figma-only and is never emitted, so it cannot be referenced here. */
|
|
139
|
+
--gf-ctrl-size-sm: var(--bl-input-md-height);
|
|
140
|
+
--gf-ctrl-size-md: var(--bl-input-md-height);
|
|
141
|
+
--gf-ctrl-size-lg: var(--bl-input-md-height);
|
|
142
|
+
--gf-ctrl-size-xl: var(--bl-input-md-height);
|
|
143
|
+
--gf-ctrl-size: var(--bl-input-md-height);
|
|
144
|
+
--gf-ctrl-padding-x: var(--bl-input-md-padding-x);
|
|
145
|
+
--gf-ctrl-padding-y: var(--bl-input-md-padding-y);
|
|
146
|
+
|
|
147
|
+
--gf-ctrl-font-family: var(--bl-font-sans);
|
|
148
|
+
--gf-ctrl-font-size: var(--bl-input-md-font-size);
|
|
149
|
+
--gf-ctrl-font-weight: 400;
|
|
150
|
+
|
|
151
|
+
/* Label and description, so a GF field reads like a Baseline Field (spec: components/field/spec.md).
|
|
152
|
+
Names verified against docs.css.gravity.com (controls > label, controls > description) on 2026-09-25.
|
|
153
|
+
Weights are literals because font-weight/* is a Figma-only scale that is never emitted (ADR-0022 §1):
|
|
154
|
+
500 is FieldLabel's font-medium, 400 is FieldDescription's font-normal. */
|
|
155
|
+
--gf-ctrl-label-color-primary: var(--foreground);
|
|
156
|
+
--gf-ctrl-label-color-secondary: var(--foreground);
|
|
157
|
+
--gf-ctrl-label-color-tertiary: var(--muted-foreground);
|
|
158
|
+
--gf-ctrl-label-color-quaternary: var(--muted-foreground);
|
|
159
|
+
--gf-ctrl-label-color-req: var(--destructive);
|
|
160
|
+
--gf-ctrl-label-font-size-primary: var(--bl-input-md-font-size);
|
|
161
|
+
--gf-ctrl-label-font-size-secondary: var(--bl-input-md-font-size);
|
|
162
|
+
--gf-ctrl-label-font-weight-primary: 500;
|
|
163
|
+
--gf-ctrl-label-font-weight-secondary: 500;
|
|
164
|
+
|
|
165
|
+
--gf-ctrl-desc-color: var(--muted-foreground);
|
|
166
|
+
--gf-ctrl-desc-color-error: var(--destructive);
|
|
167
|
+
--gf-ctrl-desc-font-family: var(--bl-font-sans);
|
|
168
|
+
--gf-ctrl-desc-font-size: var(--bl-input-md-font-size);
|
|
169
|
+
--gf-ctrl-desc-font-style: normal;
|
|
170
|
+
--gf-ctrl-desc-font-weight: 400;
|
|
171
|
+
--gf-ctrl-desc-line-height: var(--bl-input-md-line-height);
|
|
172
|
+
|
|
173
|
+
/* Choice controls: checkbox and radio (spec: components/checkbox/spec.md, components/radio/spec.md).
|
|
174
|
+
Gravity Forms tints the NATIVE control with `accent-color` and overlays a check from its own icon font.
|
|
175
|
+
That was mapped through the API at first and it does not work: Baseline sets `appearance: none`, which
|
|
176
|
+
kills `accent-color` outright, and GF's icon-font `::before` then fights Baseline's mask on the same
|
|
177
|
+
pseudo-element -- the box lost its fill and no glyph rendered. The CSS API has no hook for the box's
|
|
178
|
+
border, radius or fill on a choice control, so it cannot express Baseline's design either way.
|
|
179
|
+
Baseline therefore takes ownership of choice controls below, the same way it already owns the text box. */
|
|
180
|
+
--gf-ctrl-choice-size: var(--bl-checkbox-size);
|
|
181
|
+
|
|
182
|
+
/* Inline labels (the label beside a checkbox, radio or consent box). `-y-secondary` is the label's top
|
|
183
|
+
margin: mapping it to the field gap, as the stacked label wants, pushed every choice label 8px down and
|
|
184
|
+
broke its alignment with the control. An inline label needs no vertical offset -- the gap it does need is
|
|
185
|
+
horizontal, and GF leaves the grid column gap at 0 and takes it from the label's own margin. */
|
|
186
|
+
--gf-label-space-x-secondary: var(--bl-label-gap);
|
|
187
|
+
--gf-label-space-y-secondary: 0;
|
|
188
|
+
--gf-label-space-y-sm-secondary: 0;
|
|
189
|
+
--gf-label-space-y-md-secondary: 0;
|
|
190
|
+
--gf-label-space-y-lg-secondary: 0;
|
|
191
|
+
--gf-label-space-y-xl-secondary: 0;
|
|
192
|
+
|
|
193
|
+
/* Section break. GF draws a rule under it; Baseline's FieldSet legend is text with no underline, so the
|
|
194
|
+
border goes and the title takes the legend tokens instead (see the rules below). */
|
|
195
|
+
--gf-field-section-border-width: 0;
|
|
196
|
+
--gf-field-section-padding-y-end: 0;
|
|
197
|
+
|
|
198
|
+
/* The list field's add/remove buttons, styled as an icon Button at md: square, button radius, no padding.
|
|
199
|
+
--gf-field-list-btn-font-size stays at GF's 0: the button has a real text label ("Add another row") and
|
|
200
|
+
0 is what hides it, so raising it to the icon size put the words back on screen. The glyph is drawn on
|
|
201
|
+
::before as a Baseline mask below, at its own explicit size, so a 0 font-size costs it nothing.
|
|
202
|
+
GF exposes no colour hook for these buttons, so the fill is a real rule below.
|
|
203
|
+
--gf-field-list-btns-width is sized for ONE of GF's 16px buttons; two md buttons and the gap need more. */
|
|
204
|
+
--gf-field-list-btn-size: var(--bl-button-md-height);
|
|
205
|
+
--gf-field-list-btn-radius: var(--bl-button-md-radius);
|
|
206
|
+
--gf-field-list-btn-font-size: 0;
|
|
207
|
+
--gf-field-list-btn-padding-x: 0;
|
|
208
|
+
--gf-field-list-btn-padding-y: 0;
|
|
209
|
+
--gf-field-list-btns-width: calc(
|
|
210
|
+
2 * var(--bl-button-md-height) + var(--gf-field-list-btns-gap) + var(--gf-field-gap-x)
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/* (2) the box itself. `:where()` is deliberately NOT used here: these must beat the framework's own layer. */
|
|
215
|
+
.gform_wrapper.gform_wrapper.gform_wrapper
|
|
216
|
+
:is(input:not([type="submit"]):not([type="button"]):not([type="image"]):not([type="checkbox"]):not([type="radio"]), select, textarea) {
|
|
217
|
+
border: var(--bl-input-md-border-width) solid var(--input);
|
|
218
|
+
border-radius: var(--bl-input-md-radius);
|
|
219
|
+
background-color: transparent;
|
|
220
|
+
/* NO `box-shadow: none` here. Those five :not()s make this rule (0,9,1), while the focus and invalid
|
|
221
|
+
ring rules below are (0,4,1) and (0,5,1) -- so a resting `none` beat both and no ring ever rendered
|
|
222
|
+
inside a Gravity Forms field. Killing GF's own shadow is `--gf-ctrl-shadow: none` in the variable
|
|
223
|
+
block above, which is the CSS API's job and carries no specificity at all. */
|
|
224
|
+
color: var(--foreground);
|
|
225
|
+
font-family: var(--bl-font-sans);
|
|
226
|
+
font-size: var(--bl-input-md-font-size);
|
|
227
|
+
line-height: var(--bl-input-md-line-height);
|
|
228
|
+
transition: color 150ms, border-color 150ms, box-shadow 150ms;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/* Padding is a rule of its own so type=file, the single-select and the textarea can be carved out of it:
|
|
232
|
+
each needs a padding of its own and this rule is (0,9,1), which no plainly written override beats. */
|
|
233
|
+
.gform_wrapper.gform_wrapper.gform_wrapper
|
|
234
|
+
:is(input:not([type="submit"]):not([type="button"]):not([type="image"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]), select[multiple]) {
|
|
235
|
+
padding: var(--bl-input-md-padding-y) var(--bl-input-md-padding-x);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/* Paragraph Text. The box above already gives it the border, radius, colour and type, all of which Textarea
|
|
239
|
+
shares with Input; these are the three values that differ (spec: components/textarea/spec.md). Everything
|
|
240
|
+
resolves to the same variables as src/textarea.css, so the theme's comment box and a Gravity Forms
|
|
241
|
+
paragraph field cannot drift apart. */
|
|
242
|
+
/* four classes: GF's foundation theme sets `.gform-theme--foundation .gfield textarea.medium { min-block-size: 12rem }`
|
|
243
|
+
at (0,3,1), later in the cascade, which kept every paragraph field 192px tall so field-sizing never showed (found
|
|
244
|
+
2026-10-01). min-block-size is named too, since that is the property GF sets. */
|
|
245
|
+
.gform_wrapper.gform_wrapper.gform_wrapper.gform_wrapper textarea {
|
|
246
|
+
field-sizing: content;
|
|
247
|
+
min-height: var(--bl-textarea-md-min-height);
|
|
248
|
+
min-block-size: var(--bl-textarea-md-min-height);
|
|
249
|
+
/* GF's framework also fixes the height (block-size: var(--gf-ctrl-textarea-height), 130px); a fixed height wins over
|
|
250
|
+
field-sizing, so it goes back to auto */
|
|
251
|
+
height: auto;
|
|
252
|
+
block-size: auto;
|
|
253
|
+
padding: var(--bl-textarea-md-padding-y) var(--bl-textarea-md-padding-x);
|
|
254
|
+
border-radius: var(--bl-textarea-md-radius);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/* single-line controls take the control height; textarea and a multi-select keep their own, as in Baseline */
|
|
258
|
+
.gform_wrapper.gform_wrapper.gform_wrapper
|
|
259
|
+
:is(input:not([type="submit"]):not([type="button"]):not([type="image"]):not([type="checkbox"]):not([type="radio"]), select:not([multiple])) {
|
|
260
|
+
height: var(--bl-input-md-height);
|
|
261
|
+
align-content: center;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/* hover must change nothing: this is the rule that was failing */
|
|
265
|
+
.gform_wrapper.gform_wrapper.gform_wrapper
|
|
266
|
+
:is(input, select, textarea):hover {
|
|
267
|
+
border-color: var(--input);
|
|
268
|
+
background-color: transparent;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.gform_wrapper.gform_wrapper.gform_wrapper
|
|
272
|
+
:is(input, select, textarea)::placeholder {
|
|
273
|
+
color: var(--muted-foreground);
|
|
274
|
+
opacity: 1;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/* GF uses :focus rather than :focus-visible on its controls, so both are covered */
|
|
278
|
+
.gform_wrapper.gform_wrapper.gform_wrapper
|
|
279
|
+
:is(input, select, textarea):is(:focus, :focus-visible) {
|
|
280
|
+
border-color: var(--primary);
|
|
281
|
+
box-shadow: 0 0 0 var(--bl-control-ring-width) var(--ring);
|
|
282
|
+
outline: none;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/* invalid: GF marks the wrapper .gfield_error and sets aria-invalid on the control */
|
|
286
|
+
.gform_wrapper.gform_wrapper.gform_wrapper .gfield_error :is(input, select, textarea),
|
|
287
|
+
.gform_wrapper.gform_wrapper.gform_wrapper :is(input, select, textarea)[aria-invalid="true"] {
|
|
288
|
+
border-color: var(--destructive);
|
|
289
|
+
color: var(--destructive);
|
|
290
|
+
}
|
|
291
|
+
.gform_wrapper.gform_wrapper.gform_wrapper .gfield_error :is(input, select, textarea):is(:focus, :focus-visible),
|
|
292
|
+
.gform_wrapper.gform_wrapper.gform_wrapper :is(input, select, textarea)[aria-invalid="true"]:is(:focus, :focus-visible) {
|
|
293
|
+
box-shadow: 0 0 0 var(--bl-control-ring-width) var(--ring-invalid);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
.gform_wrapper.gform_wrapper.gform_wrapper
|
|
297
|
+
:is(input, select, textarea):disabled {
|
|
298
|
+
opacity: 0.5;
|
|
299
|
+
cursor: not-allowed;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/* file upload: the browser's own button, styled as Button secondary xs like everywhere else */
|
|
303
|
+
.gform_wrapper.gform_wrapper.gform_wrapper input[type="file"]::file-selector-button {
|
|
304
|
+
display: inline-flex;
|
|
305
|
+
align-items: center;
|
|
306
|
+
margin-inline-end: var(--bl-input-md-gap);
|
|
307
|
+
height: var(--bl-button-xs-height);
|
|
308
|
+
padding-inline: var(--bl-button-xs-padding-x);
|
|
309
|
+
border: 0;
|
|
310
|
+
border-radius: var(--bl-button-xs-radius);
|
|
311
|
+
background-color: var(--secondary);
|
|
312
|
+
color: var(--secondary-foreground);
|
|
313
|
+
font-family: inherit;
|
|
314
|
+
font-size: var(--bl-button-xs-font-size);
|
|
315
|
+
font-weight: var(--bl-button-font-weight);
|
|
316
|
+
line-height: var(--bl-input-md-line-height);
|
|
317
|
+
cursor: pointer;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/* ---------------------------------------------------------------------------------------------------------
|
|
321
|
+
Field (spec: components/field/spec.md). On WordPress the Field component emits no markup of its own: Gravity
|
|
322
|
+
Forms already renders the wrapper, label, description and validation message for every field, and WordPress
|
|
323
|
+
renders its own for search, comments and the password form (src/field.css). So Field here is the mapping
|
|
324
|
+
that makes both look like the Baseline component.
|
|
325
|
+
|
|
326
|
+
Property names and their defaults read from the installed plugin (Gravity Forms 3.1.2), not from the docs:
|
|
327
|
+
--gf-field-gap-y 12px gap between fields -> field/group/gap (16px)
|
|
328
|
+
--gf-label-space-primary 8px label to control -> field/gap (8px)
|
|
329
|
+
--gf-desc-space 8px description spacing -> field/gap (8px)
|
|
330
|
+
--gf-field-choice-gap 12px gap between choices -> field/group/gap-compact (12px)
|
|
331
|
+
--gf-desc-choice-field-space 12px choice field description -> field/gap
|
|
332
|
+
--------------------------------------------------------------------------------------------------------- */
|
|
333
|
+
|
|
334
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) {
|
|
335
|
+
/* between fields, and between the parts of one field */
|
|
336
|
+
--gf-field-gap-y: var(--bl-field-group-gap);
|
|
337
|
+
--gf-field-gap-x: var(--bl-field-group-gap);
|
|
338
|
+
--gf-label-space-primary: var(--bl-field-gap);
|
|
339
|
+
--gf-label-space-tertiary: var(--bl-field-gap);
|
|
340
|
+
/* --gf-label-space-*-secondary is the INLINE label (beside a checkbox, radio or consent box) and is set
|
|
341
|
+
with the choice controls above, not here: it is 0 there, and a second copy at this same specificity
|
|
342
|
+
would win on source order and put the 8px offset back. */
|
|
343
|
+
--gf-desc-space: var(--bl-field-gap);
|
|
344
|
+
|
|
345
|
+
/* choice lists (checkbox and radio groups) use the compact group gap, as a Baseline checkbox group does */
|
|
346
|
+
--gf-field-choice-gap: var(--bl-field-group-gap-compact);
|
|
347
|
+
--gf-desc-choice-field-space: var(--bl-field-gap);
|
|
348
|
+
|
|
349
|
+
/* the required marker is part of the label, and destructive is the Baseline colour for it */
|
|
350
|
+
--gf-ctrl-label-color-req: var(--destructive);
|
|
351
|
+
--gf-ctrl-label-font-size-req: var(--bl-label-font-size);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/* The validation message is Baseline's FieldError: same size, weight and colour, so a Gravity Forms error and
|
|
355
|
+
a Field error are indistinguishable. GF renders it as .gfield_validation_message inside the field. */
|
|
356
|
+
.gform_wrapper.gform_wrapper.gform_wrapper :is(.gfield_validation_message, .validation_message) {
|
|
357
|
+
color: var(--destructive);
|
|
358
|
+
font-family: var(--bl-font-sans);
|
|
359
|
+
font-size: var(--bl-field-error-font-size);
|
|
360
|
+
line-height: var(--bl-field-error-line-height);
|
|
361
|
+
font-weight: var(--bl-field-error-font-weight);
|
|
362
|
+
background: none;
|
|
363
|
+
border: 0;
|
|
364
|
+
padding: 0;
|
|
365
|
+
margin-block-start: var(--bl-field-gap);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/* The form-level error summary keeps GF's own layout but takes Baseline's colours and type. */
|
|
369
|
+
.gform_wrapper.gform_wrapper.gform_wrapper .gform_validation_errors {
|
|
370
|
+
border: var(--bl-input-md-border-width) solid var(--destructive);
|
|
371
|
+
border-radius: var(--bl-input-md-radius);
|
|
372
|
+
background-color: transparent;
|
|
373
|
+
box-shadow: none;
|
|
374
|
+
}
|
|
375
|
+
.gform_wrapper.gform_wrapper.gform_wrapper .gform_validation_errors :is(h2, .gform_submission_error) {
|
|
376
|
+
color: var(--destructive);
|
|
377
|
+
font-family: var(--bl-font-sans);
|
|
378
|
+
font-size: var(--bl-field-error-font-size);
|
|
379
|
+
line-height: var(--bl-field-error-line-height);
|
|
380
|
+
font-weight: var(--bl-field-error-font-weight);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/* ---------------------------------------------------------------------------------------------------------
|
|
384
|
+
Choice controls, section breaks, multi-select, file upload and the list buttons.
|
|
385
|
+
|
|
386
|
+
`:where()` is deliberately NOT used in this block: like the text box above, these must beat the framework's
|
|
387
|
+
own layer. The tripled .gform_wrapper keeps them above GF without reaching for !important.
|
|
388
|
+
--------------------------------------------------------------------------------------------------------- */
|
|
389
|
+
|
|
390
|
+
/* Checkbox and radio: Baseline draws the box, because GF's CSS API exposes no border, radius or fill for one.
|
|
391
|
+
Mirrors src/checkbox.css and src/radio.css, and through them registry/src/ui/{checkbox,radio}. The rules
|
|
392
|
+
live here rather than there because a choice control needs the extra specificity to beat the plugin. */
|
|
393
|
+
.gform_wrapper.gform_wrapper.gform_wrapper :is(input[type="checkbox"], input[type="radio"]) {
|
|
394
|
+
appearance: none;
|
|
395
|
+
position: relative;
|
|
396
|
+
flex-shrink: 0;
|
|
397
|
+
width: var(--bl-checkbox-size);
|
|
398
|
+
height: var(--bl-checkbox-size);
|
|
399
|
+
margin: 0;
|
|
400
|
+
padding: 0;
|
|
401
|
+
border: 1px solid var(--input);
|
|
402
|
+
background-color: transparent;
|
|
403
|
+
box-shadow: none;
|
|
404
|
+
transition: background-color 150ms, border-color 150ms, box-shadow 150ms;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
.gform_wrapper.gform_wrapper.gform_wrapper input[type="checkbox"] {
|
|
408
|
+
border-radius: var(--bl-checkbox-radius);
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
.gform_wrapper.gform_wrapper.gform_wrapper input[type="radio"] {
|
|
412
|
+
width: var(--bl-radio-size);
|
|
413
|
+
height: var(--bl-radio-size);
|
|
414
|
+
border-radius: 9999px;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
.gform_wrapper.gform_wrapper.gform_wrapper :is(input[type="checkbox"], input[type="radio"]):checked {
|
|
418
|
+
border-color: var(--primary);
|
|
419
|
+
background-color: var(--primary);
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
/* The glyph. `content: ""` replaces GF's icon-font character outright, so the two cannot fight over the same
|
|
423
|
+
pseudo-element; the mask follows the ACTIVE icon set through icons.generated.css. */
|
|
424
|
+
.gform_wrapper.gform_wrapper.gform_wrapper input[type="checkbox"]::before {
|
|
425
|
+
content: "";
|
|
426
|
+
position: absolute;
|
|
427
|
+
inset: 0;
|
|
428
|
+
font-size: 0;
|
|
429
|
+
background-color: var(--primary-foreground);
|
|
430
|
+
mask-image: var(--bl-icon-check);
|
|
431
|
+
mask-repeat: no-repeat;
|
|
432
|
+
mask-size: 100% 100%;
|
|
433
|
+
mask-position: center;
|
|
434
|
+
opacity: 0;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
.gform_wrapper.gform_wrapper.gform_wrapper input[type="checkbox"]:checked::before {
|
|
438
|
+
opacity: 1;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
/* The radio dot is drawn, not masked: it is a circle, so it needs no glyph. */
|
|
442
|
+
.gform_wrapper.gform_wrapper.gform_wrapper input[type="radio"]::before {
|
|
443
|
+
content: "";
|
|
444
|
+
position: absolute;
|
|
445
|
+
inset: 0;
|
|
446
|
+
margin: auto;
|
|
447
|
+
width: var(--bl-radio-dot-size);
|
|
448
|
+
height: var(--bl-radio-dot-size);
|
|
449
|
+
border-radius: 9999px;
|
|
450
|
+
background-color: var(--primary-foreground);
|
|
451
|
+
opacity: 0;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
.gform_wrapper.gform_wrapper.gform_wrapper input[type="radio"]:checked::before {
|
|
455
|
+
opacity: 1;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
.gform_wrapper.gform_wrapper.gform_wrapper
|
|
459
|
+
:is(input[type="checkbox"], input[type="radio"]):is(:focus, :focus-visible) {
|
|
460
|
+
border-color: var(--primary);
|
|
461
|
+
box-shadow: 0 0 0 var(--bl-control-ring-width) var(--ring);
|
|
462
|
+
outline: none;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
/* invalid does not override checked: a ticked-but-invalid box still has to read as ticked */
|
|
466
|
+
.gform_wrapper.gform_wrapper.gform_wrapper
|
|
467
|
+
:is(input[type="checkbox"], input[type="radio"])[aria-invalid="true"] {
|
|
468
|
+
border-color: var(--destructive);
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
.gform_wrapper.gform_wrapper.gform_wrapper
|
|
472
|
+
:is(input[type="checkbox"], input[type="radio"])[aria-invalid="true"]:checked {
|
|
473
|
+
border-color: var(--primary);
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
.gform_wrapper.gform_wrapper.gform_wrapper
|
|
477
|
+
:is(input[type="checkbox"], input[type="radio"]):disabled {
|
|
478
|
+
cursor: not-allowed;
|
|
479
|
+
opacity: 0.5;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
/* GF lays each choice out as a two-column grid. Centring the row is what aligns a single-line label with its
|
|
483
|
+
control, and is what Field orientation="horizontal" does in the React component. */
|
|
484
|
+
.gform_wrapper.gform_wrapper.gform_wrapper
|
|
485
|
+
:is(.gfield--type-choice .gchoice, .gfield--type-choice .ginput_container_consent) {
|
|
486
|
+
align-items: center;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/* Section break: no rule, and the title reads as a Baseline legend. */
|
|
490
|
+
.gform_wrapper.gform_wrapper.gform_wrapper .gsection_title {
|
|
491
|
+
font-family: var(--bl-font-sans);
|
|
492
|
+
font-size: var(--bl-field-legend-font-size);
|
|
493
|
+
line-height: var(--bl-field-legend-line-height);
|
|
494
|
+
font-weight: var(--bl-field-legend-font-weight);
|
|
495
|
+
color: var(--foreground);
|
|
496
|
+
margin-block: 0;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
.gform_wrapper.gform_wrapper.gform_wrapper .gsection_description {
|
|
500
|
+
font-size: var(--bl-field-description-font-size);
|
|
501
|
+
line-height: var(--bl-field-description-line-height);
|
|
502
|
+
color: var(--muted-foreground);
|
|
503
|
+
margin-block-start: var(--bl-field-content-gap);
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
/* A multi-select shows several rows, so it grows with them. The height rule above excludes it rather than
|
|
507
|
+
this rule overriding it: those five :not()s make the height rule (0,9,1), which this cannot beat. */
|
|
508
|
+
.gform_wrapper.gform_wrapper.gform_wrapper select[multiple] {
|
|
509
|
+
/* field-sizing sizes the box to the option list instead of the UA's fixed four rows. Where it is not
|
|
510
|
+
supported yet the height:auto/min-height pair below is still a correct box, so this is an enhancement
|
|
511
|
+
rather than a dependency. */
|
|
512
|
+
field-sizing: content;
|
|
513
|
+
height: auto;
|
|
514
|
+
min-height: var(--bl-input-md-height);
|
|
515
|
+
align-content: normal;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
/* The chevron. Gravity Forms paints its own glyph as a background-image on the select, which means it can
|
|
519
|
+
never follow a colour scheme and is not the icon set Figma names. Baseline turns it off and draws
|
|
520
|
+
chevron-down from the active set as a mask, where background-color is a live scheme colour.
|
|
521
|
+
|
|
522
|
+
The mask goes on whatever element wraps the select, because a <select> is a replaced element and cannot
|
|
523
|
+
carry a pseudo-element of its own. `:has(> select)` matches only the select's immediate parent, so one
|
|
524
|
+
rule covers the Drop Down field and the sub-selects of Date, Time and Address alike without naming any of
|
|
525
|
+
their container classes. Multi-selects are excluded: they have no chevron. */
|
|
526
|
+
.gform_wrapper.gform_wrapper.gform_wrapper select:not([multiple]) {
|
|
527
|
+
appearance: none;
|
|
528
|
+
background-image: none;
|
|
529
|
+
padding: var(--bl-input-md-padding-y) var(--bl-input-md-padding-x);
|
|
530
|
+
padding-inline-end: calc(
|
|
531
|
+
var(--bl-select-md-padding-x) + var(--bl-select-md-icon-size) + var(--bl-select-md-gap)
|
|
532
|
+
);
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
.gform_wrapper.gform_wrapper.gform_wrapper .gfield *:has(> select:not([multiple])) {
|
|
536
|
+
position: relative;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
.gform_wrapper.gform_wrapper.gform_wrapper .gfield *:has(> select:not([multiple]))::after {
|
|
540
|
+
content: "";
|
|
541
|
+
position: absolute;
|
|
542
|
+
inset-block-start: 50%;
|
|
543
|
+
inset-inline-end: var(--bl-select-md-padding-x);
|
|
544
|
+
translate: 0 -50%;
|
|
545
|
+
width: var(--bl-select-md-icon-size);
|
|
546
|
+
height: var(--bl-select-md-icon-size);
|
|
547
|
+
background-color: var(--foreground);
|
|
548
|
+
mask-image: var(--bl-icon-chevron-down);
|
|
549
|
+
mask-repeat: no-repeat;
|
|
550
|
+
mask-position: center;
|
|
551
|
+
mask-size: 100% 100%;
|
|
552
|
+
/* the chevron is decoration on top of the control; the click has to reach the select */
|
|
553
|
+
pointer-events: none;
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
/* the whole control fades together, chevron included */
|
|
557
|
+
.gform_wrapper.gform_wrapper.gform_wrapper .gfield *:has(> select:not([multiple]):disabled)::after {
|
|
558
|
+
opacity: 0.5;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
/* The number spinner is browser chrome Figma does not draw, and in Blink it appears on hover and shifts the
|
|
562
|
+
value. Hidden here as it is on every other platform (spec: components/input/spec.md). */
|
|
563
|
+
.gform_wrapper.gform_wrapper.gform_wrapper input[type="number"] {
|
|
564
|
+
appearance: textfield;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
/* GF also paints its own up/down chevrons as a background-image on the spin button (--gf-icon-ctrl-number), which
|
|
568
|
+
`appearance: none` leaves in place, so the image, width and box go too (found 2026-10-01). */
|
|
569
|
+
.gform_wrapper.gform_wrapper.gform_wrapper input[type="number"]::-webkit-inner-spin-button,
|
|
570
|
+
.gform_wrapper.gform_wrapper.gform_wrapper input[type="number"]::-webkit-outer-spin-button {
|
|
571
|
+
appearance: none;
|
|
572
|
+
display: none;
|
|
573
|
+
width: 0;
|
|
574
|
+
margin: 0;
|
|
575
|
+
background-image: none;
|
|
576
|
+
opacity: 0;
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
/* type=file lays its button and "no file chosen" text out as in-flow content, so block padding pushes the
|
|
580
|
+
button past the bottom of a fixed-height box. It keeps the inline padding and drops the block padding;
|
|
581
|
+
align-content on the height rule above does the centring. Again the exclusion is in the padding rule
|
|
582
|
+
itself, because that rule is (0,9,1) and this one is (0,4,1). */
|
|
583
|
+
.gform_wrapper.gform_wrapper.gform_wrapper input[type="file"] {
|
|
584
|
+
padding: 0 var(--bl-input-md-padding-x) 0 calc(var(--bl-input-group-md-padding-x) - 0.3rem); /* start: Input Group's leading-button padding */
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
/* The list field's add/remove buttons as an icon Button, secondary at md. GF sizes them from the variables
|
|
588
|
+
above; the fill has no API hook, so it is set here.
|
|
589
|
+
Four .gform_wrapper on purpose: GF's own rule is
|
|
590
|
+
`.gform-theme--framework.gform-theme.gform_wrapper .gfield:where(...) button.add_list_item`, which is
|
|
591
|
+
(0,5,1) -- the same weight three of them give -- and its stylesheet is enqueued after this one, so the tie
|
|
592
|
+
went to Gravity Forms and the buttons stayed primary-coloured. */
|
|
593
|
+
.gform_wrapper.gform_wrapper.gform_wrapper.gform_wrapper
|
|
594
|
+
.gfield :is(button.add_list_item, button.delete_list_item) {
|
|
595
|
+
display: inline-flex;
|
|
596
|
+
align-items: center;
|
|
597
|
+
justify-content: center;
|
|
598
|
+
/* 1px literal, as core-button.css does: button/border-width is a Figma-only token and never emits, so
|
|
599
|
+
var(--bl-button-border-width) resolved to nothing and dropped the whole declaration. */
|
|
600
|
+
border: 1px solid transparent;
|
|
601
|
+
background-color: var(--secondary);
|
|
602
|
+
color: var(--secondary-foreground);
|
|
603
|
+
cursor: pointer;
|
|
604
|
+
transition: background-color 150ms, border-color 150ms, box-shadow 150ms;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
.gform_wrapper.gform_wrapper.gform_wrapper.gform_wrapper
|
|
608
|
+
.gfield :is(button.add_list_item, button.delete_list_item):is(:focus, :focus-visible) {
|
|
609
|
+
border-color: var(--primary);
|
|
610
|
+
box-shadow: 0 0 0 var(--bl-control-ring-width) var(--ring);
|
|
611
|
+
outline: none;
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
.gform_wrapper.gform_wrapper.gform_wrapper.gform_wrapper
|
|
615
|
+
.gfield :is(button.add_list_item, button.delete_list_item):hover {
|
|
616
|
+
background-color: color-mix(in oklab, var(--secondary) 80%, transparent);
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
/* The glyph. GF draws it from its own icon font through `content: var(--gf-local-content)`, which is not
|
|
620
|
+
Baseline's icon set; these redraw it as a mask from the active set (src/icons.generated.css), the same way
|
|
621
|
+
the checkbox tick is drawn, so a designer switching sets in Figma moves these too. */
|
|
622
|
+
.gform_wrapper.gform_wrapper.gform_wrapper.gform_wrapper
|
|
623
|
+
.gfield :is(button.add_list_item, button.delete_list_item)::before {
|
|
624
|
+
/* `color` is set here, not left to inherit from the button: Gravity Forms' own ::before rule sets
|
|
625
|
+
`color: var(--gf-local-color)` DIRECTLY on this pseudo-element, and a declaration that matches the
|
|
626
|
+
element always beats a value inherited from its parent, whatever the specificity. currentColor was
|
|
627
|
+
therefore resolving to --gf-ctrl-btn-icon-color-primary (primary-foreground, white) and the mask came
|
|
628
|
+
out white on the near-white secondary fill. */
|
|
629
|
+
color: var(--secondary-foreground);
|
|
630
|
+
content: "";
|
|
631
|
+
display: block;
|
|
632
|
+
width: var(--bl-button-md-icon-size);
|
|
633
|
+
height: var(--bl-button-md-icon-size);
|
|
634
|
+
background-color: currentColor;
|
|
635
|
+
mask-repeat: no-repeat;
|
|
636
|
+
mask-position: center;
|
|
637
|
+
mask-size: 100% 100%;
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
.gform_wrapper.gform_wrapper.gform_wrapper.gform_wrapper .gfield button.add_list_item::before {
|
|
641
|
+
mask-image: var(--bl-icon-plus);
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
.gform_wrapper.gform_wrapper.gform_wrapper.gform_wrapper .gfield button.delete_list_item::before {
|
|
645
|
+
mask-image: var(--bl-icon-minus);
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
/* The submit spinner (Spinner spec, 2026-09-30). On submit, Gravity Forms' theme script appends
|
|
649
|
+
<span class="gform-loader" aria-hidden="true"> to the submit button, adds .gform-has-spinner and aria-busy, and
|
|
650
|
+
its framework / 2.5 stylesheets draw that span as a two-colour border ring while the label goes transparent.
|
|
651
|
+
Baseline draws its own Spinner there instead: the active icon set's `loader` glyph (src/icons.generated.css)
|
|
652
|
+
at the button's icon size, turning once a second, slowed rather than stopped under reduced motion. The colour
|
|
653
|
+
is set explicitly, not currentColor, because GF makes the button's text transparent while it spins. Scoped to
|
|
654
|
+
.gform_wrapper, repeated, so it wins over GF's (0,3,0) loader rule on every form theme without !important. */
|
|
655
|
+
.gform_wrapper.gform_wrapper.gform_wrapper.gform_wrapper .gform-has-spinner {
|
|
656
|
+
position: relative;
|
|
657
|
+
color: transparent;
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
.gform_wrapper.gform_wrapper.gform_wrapper.gform_wrapper .gform-loader {
|
|
661
|
+
position: absolute;
|
|
662
|
+
inset: 0;
|
|
663
|
+
display: block;
|
|
664
|
+
width: var(--bl-button-md-icon-size);
|
|
665
|
+
height: var(--bl-button-md-icon-size);
|
|
666
|
+
margin: auto;
|
|
667
|
+
border: 0;
|
|
668
|
+
border-radius: 0;
|
|
669
|
+
font-size: inherit;
|
|
670
|
+
transform: none;
|
|
671
|
+
background-color: var(--primary-foreground);
|
|
672
|
+
mask-image: var(--bl-icon-loader);
|
|
673
|
+
mask-repeat: no-repeat;
|
|
674
|
+
mask-position: center;
|
|
675
|
+
mask-size: 100% 100%;
|
|
676
|
+
animation: bl-gform-spin 1s linear infinite;
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
.gform_wrapper.gform_wrapper.gform_wrapper.gform_wrapper .gform-theme-button--secondary .gform-loader {
|
|
680
|
+
background-color: var(--secondary-foreground);
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
@media (prefers-reduced-motion: reduce) {
|
|
684
|
+
.gform_wrapper.gform_wrapper.gform_wrapper.gform_wrapper .gform-loader {
|
|
685
|
+
animation-duration: 3s;
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
@keyframes bl-gform-spin {
|
|
690
|
+
to {
|
|
691
|
+
transform: rotate(360deg);
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
/* The multi-page progress bar is Baseline's Progress (spec: components/progress/spec.md; no WordPress block, user
|
|
696
|
+
decision 2026-09-30). Gravity Forms renders
|
|
697
|
+
div.gf_progressbar_wrapper > p.gf_progressbar_title ("Step 1 of 3" + page name)
|
|
698
|
+
+ div.gf_progressbar > div.gf_progressbar_percentage[style=width:N%] > span ("N%")
|
|
699
|
+
and hides the span visually. Baseline's anatomy is label left, value right, track beneath: the title is the label,
|
|
700
|
+
and the span is un-hidden and placed at the title's end as the value (the bar stays aria-hidden, as GF made it;
|
|
701
|
+
the title already says which step this is). Every one of GF's named colours (blue, gray, green, the gradients)
|
|
702
|
+
becomes `primary`: colour is the scheme. A "Custom" colour set in the form editor is an inline style and still
|
|
703
|
+
wins, which is the editor's explicit choice. Five classes beat the 2.5 theme's (0,4,0) colour rules. */
|
|
704
|
+
.gform_wrapper.gform_wrapper.gform_wrapper.gform_wrapper .gf_progressbar_wrapper {
|
|
705
|
+
position: relative;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
.gform_wrapper.gform_wrapper.gform_wrapper.gform_wrapper .gf_progressbar_title {
|
|
709
|
+
margin: 0 0 var(--bl-progress-gap);
|
|
710
|
+
padding-inline-end: 4em; /* room for the value */
|
|
711
|
+
color: var(--foreground);
|
|
712
|
+
font-family: var(--bl-font-sans);
|
|
713
|
+
font-size: var(--bl-progress-label-font-size);
|
|
714
|
+
font-weight: var(--bl-progress-label-font-weight);
|
|
715
|
+
line-height: var(--bl-progress-label-line-height);
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
.gform_wrapper.gform_wrapper.gform_wrapper.gform_wrapper .gf_progressbar {
|
|
719
|
+
position: static; /* the value is placed against the wrapper, not the track */
|
|
720
|
+
overflow: hidden;
|
|
721
|
+
height: var(--bl-progress-track-height);
|
|
722
|
+
border-radius: var(--bl-progress-track-radius);
|
|
723
|
+
background: var(--muted);
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
.gform_wrapper.gform_wrapper.gform_wrapper.gform_wrapper .gf_progressbar .gf_progressbar_percentage {
|
|
727
|
+
height: 100%;
|
|
728
|
+
border-radius: 0; /* the track clips it, as the native bar is clipped */
|
|
729
|
+
background: var(--primary);
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
.gform_wrapper.gform_wrapper.gform_wrapper.gform_wrapper .gf_progressbar .gf_progressbar_percentage span {
|
|
733
|
+
position: absolute;
|
|
734
|
+
top: 0;
|
|
735
|
+
inset-inline-end: 0;
|
|
736
|
+
float: none;
|
|
737
|
+
width: auto;
|
|
738
|
+
min-width: 0;
|
|
739
|
+
height: auto;
|
|
740
|
+
margin: 0;
|
|
741
|
+
overflow: visible;
|
|
742
|
+
clip: auto;
|
|
743
|
+
white-space: nowrap;
|
|
744
|
+
color: var(--muted-foreground);
|
|
745
|
+
font-family: var(--bl-font-sans);
|
|
746
|
+
font-size: var(--bl-progress-value-font-size);
|
|
747
|
+
line-height: var(--bl-progress-value-line-height);
|
|
748
|
+
font-variant-numeric: tabular-nums;
|
|
749
|
+
text-shadow: none;
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
/* Phone (international format): GF renders a country selector button and the number input side by side, each with its
|
|
753
|
+
own sub-label. Baseline draws them as one group, the way ButtonGroup joins a button and an input (spec:
|
|
754
|
+
components/button-group/spec.md): the selector is an outline button on Input's box (same height, border and radius,
|
|
755
|
+
start corners only); the input loses its start border and corners, so the two share one seam. GF's own country list
|
|
756
|
+
stays as it is. These rules carry the same `:is(#bl-gform, .gform_wrapper)` lift as the variable blocks: our own
|
|
757
|
+
control rule above (`.gform_wrapper×3 :is(input:not(...)×5, select)`) is (0,8,1), because :is() takes its strongest
|
|
758
|
+
argument, and it would otherwise win the input's border and corners back. */
|
|
759
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gform-phone__country-selector {
|
|
760
|
+
display: inline-flex;
|
|
761
|
+
align-items: center;
|
|
762
|
+
gap: var(--bl-input-md-gap);
|
|
763
|
+
height: var(--bl-input-md-height);
|
|
764
|
+
padding: 0 var(--bl-input-md-padding-x);
|
|
765
|
+
border: var(--bl-input-md-border-width) solid var(--input);
|
|
766
|
+
border-start-start-radius: var(--bl-input-md-radius);
|
|
767
|
+
border-end-start-radius: var(--bl-input-md-radius);
|
|
768
|
+
border-start-end-radius: 0;
|
|
769
|
+
border-end-end-radius: 0;
|
|
770
|
+
background-color: transparent;
|
|
771
|
+
box-shadow: none;
|
|
772
|
+
color: var(--foreground);
|
|
773
|
+
font-size: var(--bl-input-md-font-size);
|
|
774
|
+
line-height: var(--bl-input-md-line-height);
|
|
775
|
+
}
|
|
776
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gform-phone__country-selector:hover,
|
|
777
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gform-phone__country-selector[aria-expanded="true"] {
|
|
778
|
+
background-color: var(--muted);
|
|
779
|
+
}
|
|
780
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gform-phone__country-selector:focus-visible {
|
|
781
|
+
position: relative;
|
|
782
|
+
z-index: 1;
|
|
783
|
+
outline: none;
|
|
784
|
+
border-color: var(--ring);
|
|
785
|
+
box-shadow: 0 0 0 var(--bl-control-ring-width) var(--ring);
|
|
786
|
+
}
|
|
787
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gform-phone__input {
|
|
788
|
+
border-inline-start-width: 0;
|
|
789
|
+
border-start-start-radius: 0;
|
|
790
|
+
border-end-start-radius: 0;
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
/* The phone field's country list is GF's own listbox: Baseline styles it as the Select panel (spec:
|
|
794
|
+
components/select/spec.md; React's SelectContent / SelectItem), though Select itself is not a WordPress component
|
|
795
|
+
(only Native select is). GF fills it with --gf-ctrl-bg-color, which Baseline sets transparent for controls, so it
|
|
796
|
+
had no background at all (found 2026-10-01). The shadow is Tailwind's shadow-md, the value React's panel uses. */
|
|
797
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gform-phone__dropdown {
|
|
798
|
+
padding: var(--bl-select-panel-padding);
|
|
799
|
+
border: var(--bl-select-panel-border-width) solid var(--border);
|
|
800
|
+
border-radius: var(--bl-select-panel-radius);
|
|
801
|
+
background-color: var(--popover);
|
|
802
|
+
color: var(--popover-foreground);
|
|
803
|
+
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
|
804
|
+
}
|
|
805
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gform-phone__search-wrapper {
|
|
806
|
+
margin: 0 0 var(--bl-select-panel-padding);
|
|
807
|
+
padding: 0;
|
|
808
|
+
background-color: transparent;
|
|
809
|
+
}
|
|
810
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gform-phone__country-list {
|
|
811
|
+
padding: 0;
|
|
812
|
+
}
|
|
813
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gform-phone__country-item {
|
|
814
|
+
position: relative;
|
|
815
|
+
display: flex;
|
|
816
|
+
align-items: center;
|
|
817
|
+
gap: var(--bl-select-item-gap);
|
|
818
|
+
padding-block: var(--bl-select-item-padding-y);
|
|
819
|
+
padding-inline: var(--bl-select-item-padding-x) calc(var(--bl-select-item-padding-x) + var(--bl-select-item-icon-size) + var(--bl-select-item-gap));
|
|
820
|
+
border-radius: var(--bl-select-item-radius);
|
|
821
|
+
color: var(--popover-foreground);
|
|
822
|
+
font-size: var(--bl-select-item-font-size);
|
|
823
|
+
line-height: var(--bl-select-item-line-height);
|
|
824
|
+
cursor: default;
|
|
825
|
+
}
|
|
826
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gform-phone__country-item:hover,
|
|
827
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gform-phone__country-item--focused {
|
|
828
|
+
background-color: var(--accent);
|
|
829
|
+
color: var(--accent-foreground);
|
|
830
|
+
}
|
|
831
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gform-phone__country-item--active {
|
|
832
|
+
box-shadow: none;
|
|
833
|
+
}
|
|
834
|
+
/* the selected country gets Select's check at the inline end */
|
|
835
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gform-phone__country-item--active::after {
|
|
836
|
+
content: "";
|
|
837
|
+
position: absolute;
|
|
838
|
+
inset-inline-end: var(--bl-select-item-padding-x);
|
|
839
|
+
width: var(--bl-select-item-icon-size);
|
|
840
|
+
height: var(--bl-select-item-icon-size);
|
|
841
|
+
background-color: currentColor;
|
|
842
|
+
mask-image: var(--bl-icon-check);
|
|
843
|
+
mask-repeat: no-repeat;
|
|
844
|
+
mask-position: center;
|
|
845
|
+
mask-size: 100% 100%;
|
|
846
|
+
}
|
|
847
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gform-phone__country-code {
|
|
848
|
+
margin-inline-start: auto;
|
|
849
|
+
color: var(--muted-foreground);
|
|
850
|
+
}
|
|
851
|
+
/* GF draws a magnifier in the search field as a background image at its own padding; Baseline's input padding put the
|
|
852
|
+
placeholder on top of it. The icon sits at the input's padding, the text after it, as Input Group's leading addon. */
|
|
853
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gform-phone__search-wrapper input.gform-phone__search {
|
|
854
|
+
padding-inline-start: calc(var(--bl-input-md-padding-x) + var(--bl-control-addon-icon-size) + var(--bl-control-addon-gap));
|
|
855
|
+
background-position: var(--bl-input-md-padding-x) center;
|
|
856
|
+
background-size: var(--bl-control-addon-icon-size) var(--bl-control-addon-icon-size);
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
/* Image Select (GF's image_choice field, "card" appearance) is Baseline's option card (user decision 2026-10-01;
|
|
860
|
+
spec: components/field/spec.md): React's FieldLabel wrapping a Field, the field/option-card/* tokens. The whole choice
|
|
861
|
+
is the click target; border, radius and the selected tint (primary at 5 % / 30 %, on :has(:checked)) are the option
|
|
862
|
+
card's; hover fills muted at 50 %; keyboard focus rings the card. The image runs full bleed across the top as Card's
|
|
863
|
+
media does (Square style; a Circle image stays round and inset). GF's shadow and its check badge (::after, which
|
|
864
|
+
repeats the radio or checkbox) go. The "no card" appearance, an image with nothing around it, stays GF's. */
|
|
865
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gfield--image-choice-appearance-card .gchoice {
|
|
866
|
+
overflow: hidden;
|
|
867
|
+
border: var(--bl-field-option-card-border-width) solid var(--border);
|
|
868
|
+
border-radius: var(--bl-field-option-card-radius);
|
|
869
|
+
background-color: transparent;
|
|
870
|
+
box-shadow: none;
|
|
871
|
+
transition: background-color 150ms, border-color 150ms, box-shadow 150ms;
|
|
872
|
+
}
|
|
873
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gfield--image-choice-appearance-card .gchoice:not(:has(:disabled)):hover {
|
|
874
|
+
background-color: color-mix(in oklab, var(--muted) 50%, transparent);
|
|
875
|
+
}
|
|
876
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gfield--image-choice-appearance-card .gchoice:has(:checked) {
|
|
877
|
+
border-color: var(--bl-field-option-card-border-selected);
|
|
878
|
+
background-color: var(--bl-field-option-card-background-selected);
|
|
879
|
+
}
|
|
880
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gfield--image-choice-appearance-card .gchoice:has(:focus-visible) {
|
|
881
|
+
border-color: var(--ring);
|
|
882
|
+
box-shadow: 0 0 0 var(--bl-control-ring-width) var(--ring);
|
|
883
|
+
}
|
|
884
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gfield--image-choice-appearance-card.gfield_error .gchoice {
|
|
885
|
+
border-color: var(--destructive);
|
|
886
|
+
}
|
|
887
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gfield--image-choice-appearance-card .gchoice::after {
|
|
888
|
+
display: none;
|
|
889
|
+
}
|
|
890
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gfield--image-choice-appearance-card .gfield-image-choice-wrapper-outer {
|
|
891
|
+
padding: 0;
|
|
892
|
+
}
|
|
893
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gfield--image-choice-appearance-card.gfield--image-choice-style-square .gfield-choice-image-wrapper {
|
|
894
|
+
border-radius: 0;
|
|
895
|
+
}
|
|
896
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gfield--image-choice-appearance-card.gfield--image-choice-style-circle .gfield-image-choice-wrapper-outer {
|
|
897
|
+
padding: var(--bl-field-option-card-padding) var(--bl-field-option-card-padding) 0;
|
|
898
|
+
}
|
|
899
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gfield--image-choice-appearance-card .gfield-image-choice-wrapper-inner {
|
|
900
|
+
padding: var(--bl-field-option-card-padding);
|
|
901
|
+
column-gap: var(--bl-field-option-card-column-gap);
|
|
902
|
+
}
|
|
903
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gfield--image-choice-appearance-card .gchoice .gform-field-label {
|
|
904
|
+
margin: 0; /* GF's own inline margin doubled the gap: the option card's column gap is the space */
|
|
905
|
+
color: var(--foreground);
|
|
906
|
+
}
|
|
907
|
+
/* the image fills its frame edge to edge: GF's Square frame letterboxed a landscape photo, and typeset's prose image
|
|
908
|
+
rule (the form sits in post content) rounded it inside the card */
|
|
909
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gfield--image-choice-appearance-card .gfield-choice-image-wrapper {
|
|
910
|
+
margin: 0;
|
|
911
|
+
}
|
|
912
|
+
.gform_wrapper.gform_wrapper.gform_wrapper:is(#bl-gform, .gform_wrapper) .gfield--image-choice-appearance-card.gfield--image-choice-style-square .gfield-choice-image {
|
|
913
|
+
display: block;
|
|
914
|
+
width: 100%;
|
|
915
|
+
height: 100%;
|
|
916
|
+
margin: 0;
|
|
917
|
+
border-radius: 0;
|
|
918
|
+
object-fit: cover;
|
|
919
|
+
}
|