@panphora/bevel 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/LICENSE +16 -0
- package/README.md +226 -0
- package/bevel-fonts.css +16 -0
- package/bevel.css +3075 -0
- package/bevel.js +2126 -0
- package/dist/react/components/activity-feed.d.ts +89 -0
- package/dist/react/components/activity-feed.js +54 -0
- package/dist/react/components/alert-dialog.d.ts +14 -0
- package/dist/react/components/alert-dialog.js +19 -0
- package/dist/react/components/app-shell.d.ts +98 -0
- package/dist/react/components/app-shell.js +86 -0
- package/dist/react/components/app-toolbar.d.ts +19 -0
- package/dist/react/components/app-toolbar.js +22 -0
- package/dist/react/components/avatar-group.d.ts +67 -0
- package/dist/react/components/avatar-group.js +49 -0
- package/dist/react/components/badge-and-pill.d.ts +34 -0
- package/dist/react/components/badge-and-pill.js +12 -0
- package/dist/react/components/breadcrumbs.d.ts +56 -0
- package/dist/react/components/breadcrumbs.js +44 -0
- package/dist/react/components/bulk-bar.d.ts +22 -0
- package/dist/react/components/bulk-bar.js +59 -0
- package/dist/react/components/button.d.ts +15 -0
- package/dist/react/components/button.js +20 -0
- package/dist/react/components/callout-and-hint.d.ts +17 -0
- package/dist/react/components/callout-and-hint.js +8 -0
- package/dist/react/components/checkbox.d.ts +5 -0
- package/dist/react/components/checkbox.js +13 -0
- package/dist/react/components/chip.d.ts +149 -0
- package/dist/react/components/chip.js +29 -0
- package/dist/react/components/code-block.d.ts +50 -0
- package/dist/react/components/code-block.js +77 -0
- package/dist/react/components/code-editor.d.ts +122 -0
- package/dist/react/components/code-editor.js +695 -0
- package/dist/react/components/column-manager.d.ts +28 -0
- package/dist/react/components/column-manager.js +85 -0
- package/dist/react/components/combobox.d.ts +32 -0
- package/dist/react/components/combobox.js +37 -0
- package/dist/react/components/data-grid.d.ts +108 -0
- package/dist/react/components/data-grid.js +159 -0
- package/dist/react/components/data-table.d.ts +2 -0
- package/dist/react/components/data-table.js +6 -0
- package/dist/react/components/date.d.ts +23 -0
- package/dist/react/components/date.js +11 -0
- package/dist/react/components/details.d.ts +13 -0
- package/dist/react/components/details.js +20 -0
- package/dist/react/components/dialog.d.ts +74 -0
- package/dist/react/components/dialog.js +31 -0
- package/dist/react/components/diff-view.d.ts +73 -0
- package/dist/react/components/diff-view.js +68 -0
- package/dist/react/components/documents.d.ts +70 -0
- package/dist/react/components/documents.js +10 -0
- package/dist/react/components/drawer.d.ts +45 -0
- package/dist/react/components/drawer.js +35 -0
- package/dist/react/components/editable-grid-cells.d.ts +32 -0
- package/dist/react/components/editable-grid-cells.js +116 -0
- package/dist/react/components/eyebrow-kicker-lede-pull-quote.d.ts +39 -0
- package/dist/react/components/eyebrow-kicker-lede-pull-quote.js +12 -0
- package/dist/react/components/field.d.ts +32 -0
- package/dist/react/components/field.js +27 -0
- package/dist/react/components/file-tree.d.ts +75 -0
- package/dist/react/components/file-tree.js +247 -0
- package/dist/react/components/file.d.ts +43 -0
- package/dist/react/components/file.js +73 -0
- package/dist/react/components/files-table.d.ts +174 -0
- package/dist/react/components/files-table.js +237 -0
- package/dist/react/components/filter-builder.d.ts +37 -0
- package/dist/react/components/filter-builder.js +109 -0
- package/dist/react/components/form-error-summary.d.ts +16 -0
- package/dist/react/components/form-error-summary.js +49 -0
- package/dist/react/components/icon-button.d.ts +8 -0
- package/dist/react/components/icon-button.js +14 -0
- package/dist/react/components/icon.d.ts +7 -0
- package/dist/react/components/icon.js +15 -0
- package/dist/react/components/image.d.ts +72 -0
- package/dist/react/components/image.js +24 -0
- package/dist/react/components/inline-edit.d.ts +70 -0
- package/dist/react/components/inline-edit.js +149 -0
- package/dist/react/components/input.d.ts +29 -0
- package/dist/react/components/input.js +20 -0
- package/dist/react/components/kanban-board.d.ts +140 -0
- package/dist/react/components/kanban-board.js +374 -0
- package/dist/react/components/layout.d.ts +51 -0
- package/dist/react/components/layout.js +28 -0
- package/dist/react/components/list.d.ts +28 -0
- package/dist/react/components/list.js +6 -0
- package/dist/react/components/masthead-and-verdict.d.ts +60 -0
- package/dist/react/components/masthead-and-verdict.js +8 -0
- package/dist/react/components/menu.d.ts +26 -0
- package/dist/react/components/menu.js +31 -0
- package/dist/react/components/multi-select-picker.d.ts +49 -0
- package/dist/react/components/multi-select-picker.js +20 -0
- package/dist/react/components/note.d.ts +33 -0
- package/dist/react/components/note.js +8 -0
- package/dist/react/components/number-field.d.ts +16 -0
- package/dist/react/components/number-field.js +17 -0
- package/dist/react/components/pagination.d.ts +45 -0
- package/dist/react/components/pagination.js +87 -0
- package/dist/react/components/persistent-action-banner.d.ts +71 -0
- package/dist/react/components/persistent-action-banner.js +39 -0
- package/dist/react/components/popconfirm.d.ts +42 -0
- package/dist/react/components/popconfirm.js +59 -0
- package/dist/react/components/popover.d.ts +16 -0
- package/dist/react/components/popover.js +21 -0
- package/dist/react/components/progress-and-gauge.d.ts +44 -0
- package/dist/react/components/progress-and-gauge.js +19 -0
- package/dist/react/components/radio.d.ts +7 -0
- package/dist/react/components/radio.js +13 -0
- package/dist/react/components/rich-text-toolbar.d.ts +26 -0
- package/dist/react/components/rich-text-toolbar.js +64 -0
- package/dist/react/components/rows-and-card.d.ts +88 -0
- package/dist/react/components/rows-and-card.js +10 -0
- package/dist/react/components/save-status-indicator.d.ts +11 -0
- package/dist/react/components/save-status-indicator.js +33 -0
- package/dist/react/components/segmented-control.d.ts +21 -0
- package/dist/react/components/segmented-control.js +15 -0
- package/dist/react/components/select.d.ts +29 -0
- package/dist/react/components/select.js +29 -0
- package/dist/react/components/selectable-cards.d.ts +30 -0
- package/dist/react/components/selectable-cards.js +29 -0
- package/dist/react/components/settings-rows.d.ts +51 -0
- package/dist/react/components/settings-rows.js +8 -0
- package/dist/react/components/sidebar-nav.d.ts +77 -0
- package/dist/react/components/sidebar-nav.js +41 -0
- package/dist/react/components/skeleton-and-empty.d.ts +51 -0
- package/dist/react/components/skeleton-and-empty.js +14 -0
- package/dist/react/components/slider.d.ts +19 -0
- package/dist/react/components/slider.js +17 -0
- package/dist/react/components/small-charts.d.ts +60 -0
- package/dist/react/components/small-charts.js +76 -0
- package/dist/react/components/sortable.d.ts +30 -0
- package/dist/react/components/sortable.js +85 -0
- package/dist/react/components/split-button.d.ts +38 -0
- package/dist/react/components/split-button.js +43 -0
- package/dist/react/components/split-panes.d.ts +35 -0
- package/dist/react/components/split-panes.js +102 -0
- package/dist/react/components/stat-tiles.d.ts +54 -0
- package/dist/react/components/stat-tiles.js +8 -0
- package/dist/react/components/steps.d.ts +11 -0
- package/dist/react/components/steps.js +13 -0
- package/dist/react/components/switch.d.ts +6 -0
- package/dist/react/components/switch.js +13 -0
- package/dist/react/components/table.d.ts +61 -0
- package/dist/react/components/table.js +6 -0
- package/dist/react/components/tabs.d.ts +7 -0
- package/dist/react/components/tabs.js +13 -0
- package/dist/react/components/tags.d.ts +33 -0
- package/dist/react/components/tags.js +83 -0
- package/dist/react/components/textarea.d.ts +10 -0
- package/dist/react/components/textarea.js +6 -0
- package/dist/react/components/toast.d.ts +35 -0
- package/dist/react/components/toast.js +90 -0
- package/dist/react/components/tooltip-and-key.d.ts +20 -0
- package/dist/react/components/tooltip-and-key.js +20 -0
- package/dist/react/components/tree-view.d.ts +34 -0
- package/dist/react/components/tree-view.js +118 -0
- package/dist/react/components/upload-dropzone.d.ts +92 -0
- package/dist/react/components/upload-dropzone.js +116 -0
- package/dist/react/components/wizard-shell.d.ts +78 -0
- package/dist/react/components/wizard-shell.js +176 -0
- package/dist/react/fonts.css.d.ts +1 -0
- package/dist/react/index.d.ts +76 -0
- package/dist/react/index.js +77 -0
- package/dist/react/integrations/quickcrop.d.ts +58 -0
- package/dist/react/integrations/quickcrop.js +137 -0
- package/dist/react/integrations/richclay.d.ts +43 -0
- package/dist/react/integrations/richclay.js +129 -0
- package/dist/react/internal/classes.d.ts +3 -0
- package/dist/react/internal/classes.js +10 -0
- package/dist/react/internal/close-mark.d.ts +1 -0
- package/dist/react/internal/close-mark.js +10 -0
- package/dist/react/internal/controllable-state.d.ts +9 -0
- package/dist/react/internal/controllable-state.js +22 -0
- package/dist/react/internal/drop-effect.d.ts +28 -0
- package/dist/react/internal/drop-effect.js +8 -0
- package/dist/react/internal/form-reset.d.ts +2 -0
- package/dist/react/internal/form-reset.js +22 -0
- package/dist/react/internal/format.d.ts +1 -0
- package/dist/react/internal/format.js +14 -0
- package/dist/react/internal/link.d.ts +2 -0
- package/dist/react/internal/link.js +8 -0
- package/dist/react/internal/part.d.ts +20 -0
- package/dist/react/internal/part.js +47 -0
- package/dist/react/internal/pointer-session.d.ts +8 -0
- package/dist/react/internal/pointer-session.js +60 -0
- package/dist/react/internal/refs.d.ts +2 -0
- package/dist/react/internal/refs.js +22 -0
- package/dist/react/internal/rich-text.d.ts +28 -0
- package/dist/react/internal/rich-text.js +4 -0
- package/dist/react/internal/table-context.d.ts +39 -0
- package/dist/react/internal/table-context.js +12 -0
- package/dist/react/internal/use-object-url.d.ts +1 -0
- package/dist/react/internal/use-object-url.js +15 -0
- package/dist/react/layout.css +274 -0
- package/dist/react/layout.css.d.ts +1 -0
- package/dist/react/models/filter.d.ts +31 -0
- package/dist/react/models/filter.js +79 -0
- package/dist/react/models/kanban.d.ts +51 -0
- package/dist/react/models/kanban.js +35 -0
- package/dist/react/models/reorder.d.ts +9 -0
- package/dist/react/models/reorder.js +23 -0
- package/dist/react/models/table.d.ts +85 -0
- package/dist/react/models/table.js +144 -0
- package/dist/react/models/tree.d.ts +16 -0
- package/dist/react/models/tree.js +26 -0
- package/dist/react/provider.d.ts +18 -0
- package/dist/react/provider.js +31 -0
- package/dist/react/recipes/context-hypercms.d.ts +17 -0
- package/dist/react/recipes/context-hypercms.js +71 -0
- package/dist/react/recipes/context-quickcrop.d.ts +8 -0
- package/dist/react/recipes/context-quickcrop.js +49 -0
- package/dist/react/theme.css +8004 -0
- package/dist/react/theme.css.d.ts +1 -0
- package/examples/README.md +34 -0
- package/examples/components/activity-feed.html +28 -0
- package/examples/components/app-shell.html +12 -0
- package/examples/components/app-toolbar.html +38 -0
- package/examples/components/avatar-group.html +27 -0
- package/examples/components/breadcrumbs.html +26 -0
- package/examples/components/bulk-bar.html +22 -0
- package/examples/components/code-block.html +12 -0
- package/examples/components/code-editor.html +25 -0
- package/examples/components/column-manager.html +9 -0
- package/examples/components/combobox.html +13 -0
- package/examples/components/context-hypercms.css +41 -0
- package/examples/components/context-hypercms.html +40 -0
- package/examples/components/context-hypercms.js +62 -0
- package/examples/components/context-quickcrop.html +137 -0
- package/examples/components/diff-view.html +9 -0
- package/examples/components/drawer.html +11 -0
- package/examples/components/editable-grid-cells.html +9 -0
- package/examples/components/file-browser.html +53 -0
- package/examples/components/file-tree.html +34 -0
- package/examples/components/files-table.html +80 -0
- package/examples/components/filter-builder.html +11 -0
- package/examples/components/form-error-summary.html +11 -0
- package/examples/components/index.html +51 -0
- package/examples/components/inline-edit.html +42 -0
- package/examples/components/kanban-board.html +42 -0
- package/examples/components/manifest.json +3279 -0
- package/examples/components/modal.html +11 -0
- package/examples/components/multi-select-picker.html +13 -0
- package/examples/components/pagination.html +32 -0
- package/examples/components/persistent-action-banner.html +23 -0
- package/examples/components/popconfirm.html +13 -0
- package/examples/components/popover-menu.html +13 -0
- package/examples/components/reference/baseline/DECISIONS.md +85 -0
- package/examples/components/reference/baseline/README.md +58 -0
- package/examples/components/reference/baseline/bevel-fonts.css +16 -0
- package/examples/components/reference/baseline/bevel.css +1339 -0
- package/examples/components/reference/baseline/bevel.js +496 -0
- package/examples/components/reference/baseline/fonts/LICENSE-ibm-plex-mono.txt +93 -0
- package/examples/components/reference/baseline/fonts/LICENSE-ibm-plex-sans.txt +93 -0
- package/examples/components/reference/baseline/fonts/LICENSE-newsreader.txt +93 -0
- package/examples/components/reference/baseline/fonts/ibm-plex-mono-latin-400-normal.woff2 +0 -0
- package/examples/components/reference/baseline/fonts/ibm-plex-mono-latin-500-normal.woff2 +0 -0
- package/examples/components/reference/baseline/fonts/ibm-plex-mono-latin-600-normal.woff2 +0 -0
- package/examples/components/reference/baseline/fonts/ibm-plex-sans-latin-400-italic.woff2 +0 -0
- package/examples/components/reference/baseline/fonts/ibm-plex-sans-latin-400-normal.woff2 +0 -0
- package/examples/components/reference/baseline/fonts/ibm-plex-sans-latin-500-normal.woff2 +0 -0
- package/examples/components/reference/baseline/fonts/ibm-plex-sans-latin-600-normal.woff2 +0 -0
- package/examples/components/reference/baseline/fonts/newsreader-latin-opsz-italic.woff2 +0 -0
- package/examples/components/reference/baseline/fonts/newsreader-latin-opsz-normal.woff2 +0 -0
- package/examples/components/reference/fable/IMPROVEMENTS.md +106 -0
- package/examples/components/reference/fable/PARENT-REPAIRS.md +17 -0
- package/examples/components/reference/fable/__pycache__/build_repairs.cpython-311.pyc +0 -0
- package/examples/components/reference/fable/__pycache__/kanban.cpython-311.pyc +0 -0
- package/examples/components/reference/fable/as-authored/IMPROVEMENTS-completed.md +106 -0
- package/examples/components/reference/fable/as-authored/base-astra.css +17 -0
- package/examples/components/reference/fable/as-authored/base-parent.css +416 -0
- package/examples/components/reference/fable/as-authored/build.py +858 -0
- package/examples/components/reference/fable/as-authored/fable.css +823 -0
- package/examples/components/reference/fable/as-authored/kanban-completed.css +235 -0
- package/examples/components/reference/fable/as-authored/kanban-completed.html +53 -0
- package/examples/components/reference/fable/as-authored/kanban-completed.py +212 -0
- package/examples/components/reference/fable/as-authored/kanban.py +207 -0
- package/examples/components/reference/fable/base-astra.css +17 -0
- package/examples/components/reference/fable/base-parent.css +416 -0
- package/examples/components/reference/fable/build.py +858 -0
- package/examples/components/reference/fable/build_repairs.py +25 -0
- package/examples/components/reference/fable/components/activity-feed.html +3 -0
- package/examples/components/reference/fable/components/app-toolbar.html +3 -0
- package/examples/components/reference/fable/components/avatar-group.html +4 -0
- package/examples/components/reference/fable/components/breadcrumbs.html +3 -0
- package/examples/components/reference/fable/components/code-block.html +9 -0
- package/examples/components/reference/fable/components/column-manager.html +3 -0
- package/examples/components/reference/fable/components/combobox.html +6 -0
- package/examples/components/reference/fable/components/context-hypercms.html +3 -0
- package/examples/components/reference/fable/components/context-quickcrop.html +4 -0
- package/examples/components/reference/fable/components/diff-view.html +13 -0
- package/examples/components/reference/fable/components/drawer.html +3 -0
- package/examples/components/reference/fable/components/editable-grid-cells.html +3 -0
- package/examples/components/reference/fable/components/filter-builder.html +3 -0
- package/examples/components/reference/fable/components/form-error-summary.html +4 -0
- package/examples/components/reference/fable/components/inline-edit.html +3 -0
- package/examples/components/reference/fable/components/kanban-board.html +53 -0
- package/examples/components/reference/fable/components/modal.html +3 -0
- package/examples/components/reference/fable/components/multi-select-picker.html +5 -0
- package/examples/components/reference/fable/components/pagination.html +3 -0
- package/examples/components/reference/fable/components/persistent-action-banner.html +4 -0
- package/examples/components/reference/fable/components/popconfirm.html +5 -0
- package/examples/components/reference/fable/components/popover-menu.html +3 -0
- package/examples/components/reference/fable/components/rich-text-toolbar.html +3 -0
- package/examples/components/reference/fable/components/save-status-indicator.html +2 -0
- package/examples/components/reference/fable/components/selectable-cards.html +3 -0
- package/examples/components/reference/fable/components/settings-rows.html +3 -0
- package/examples/components/reference/fable/components/sidebar-nav.html +4 -0
- package/examples/components/reference/fable/components/small-charts.html +5 -0
- package/examples/components/reference/fable/components/split-button.html +4 -0
- package/examples/components/reference/fable/components/split-panes.html +8 -0
- package/examples/components/reference/fable/components/stat-tiles.html +3 -0
- package/examples/components/reference/fable/components/toast-stack.html +5 -0
- package/examples/components/reference/fable/components/tree-view.html +4 -0
- package/examples/components/reference/fable/components/upload-dropzone.html +6 -0
- package/examples/components/reference/fable/components/wizard-shell.html +3 -0
- package/examples/components/reference/fable/coverage.json +414 -0
- package/examples/components/reference/fable/fable.css +823 -0
- package/examples/components/reference/fable/index.html +5 -0
- package/examples/components/reference/fable/kanban.css +237 -0
- package/examples/components/reference/fable/kanban.py +212 -0
- package/examples/components/reference/fable/parent-repairs.css +9 -0
- package/examples/components/reference/fixtures/data.json +102 -0
- package/examples/components/reference/fixtures/host.js +47 -0
- package/examples/components/reference/fixtures/static-host.js +39 -0
- package/examples/components/reference/fixtures/workspace.jpg +0 -0
- package/examples/components/reference/parent/CHANGES.md +179 -0
- package/examples/components/reference/parent/__pycache__/kanban.cpython-311.pyc +0 -0
- package/examples/components/reference/parent/base-astra.css +17 -0
- package/examples/components/reference/parent/base-parent.css +416 -0
- package/examples/components/reference/parent/build.py +148 -0
- package/examples/components/reference/parent/components/activity-feed.html +2 -0
- package/examples/components/reference/parent/components/app-toolbar.html +2 -0
- package/examples/components/reference/parent/components/avatar-group.html +4 -0
- package/examples/components/reference/parent/components/breadcrumbs.html +2 -0
- package/examples/components/reference/parent/components/code-block.html +8 -0
- package/examples/components/reference/parent/components/column-manager.html +2 -0
- package/examples/components/reference/parent/components/combobox.html +6 -0
- package/examples/components/reference/parent/components/context-hypercms.html +2 -0
- package/examples/components/reference/parent/components/context-quickcrop.html +4 -0
- package/examples/components/reference/parent/components/diff-view.html +4 -0
- package/examples/components/reference/parent/components/drawer.html +2 -0
- package/examples/components/reference/parent/components/editable-grid-cells.html +2 -0
- package/examples/components/reference/parent/components/filter-builder.html +2 -0
- package/examples/components/reference/parent/components/form-error-summary.html +2 -0
- package/examples/components/reference/parent/components/inline-edit.html +2 -0
- package/examples/components/reference/parent/components/kanban-board.html +84 -0
- package/examples/components/reference/parent/components/modal.html +2 -0
- package/examples/components/reference/parent/components/multi-select-picker.html +5 -0
- package/examples/components/reference/parent/components/pagination.html +2 -0
- package/examples/components/reference/parent/components/persistent-action-banner.html +4 -0
- package/examples/components/reference/parent/components/popconfirm.html +5 -0
- package/examples/components/reference/parent/components/popover-menu.html +2 -0
- package/examples/components/reference/parent/components/rich-text-toolbar.html +2 -0
- package/examples/components/reference/parent/components/save-status-indicator.html +2 -0
- package/examples/components/reference/parent/components/selectable-cards.html +2 -0
- package/examples/components/reference/parent/components/settings-rows.html +2 -0
- package/examples/components/reference/parent/components/sidebar-nav.html +4 -0
- package/examples/components/reference/parent/components/small-charts.html +2 -0
- package/examples/components/reference/parent/components/split-button.html +5 -0
- package/examples/components/reference/parent/components/split-panes.html +8 -0
- package/examples/components/reference/parent/components/stat-tiles.html +2 -0
- package/examples/components/reference/parent/components/toast-stack.html +5 -0
- package/examples/components/reference/parent/components/tree-view.html +4 -0
- package/examples/components/reference/parent/components/upload-dropzone.html +6 -0
- package/examples/components/reference/parent/components/wizard-shell.html +2 -0
- package/examples/components/reference/parent/coverage.json +414 -0
- package/examples/components/reference/parent/index.html +1 -0
- package/examples/components/reference/parent/kanban.css +114 -0
- package/examples/components/reference/parent/kanban.py +55 -0
- package/examples/components/reference/parent/refinement.css +53 -0
- package/examples/components/reference/selected/build.py +70 -0
- package/examples/components/reference/selected/components/activity-feed.html +3 -0
- package/examples/components/reference/selected/components/app-toolbar.html +3 -0
- package/examples/components/reference/selected/components/avatar-group.html +4 -0
- package/examples/components/reference/selected/components/breadcrumbs.html +3 -0
- package/examples/components/reference/selected/components/code-block.html +9 -0
- package/examples/components/reference/selected/components/column-manager.html +3 -0
- package/examples/components/reference/selected/components/combobox.html +6 -0
- package/examples/components/reference/selected/components/context-hypercms.html +3 -0
- package/examples/components/reference/selected/components/context-quickcrop.html +4 -0
- package/examples/components/reference/selected/components/diff-view.html +13 -0
- package/examples/components/reference/selected/components/drawer.html +3 -0
- package/examples/components/reference/selected/components/editable-grid-cells.html +3 -0
- package/examples/components/reference/selected/components/filter-builder.html +3 -0
- package/examples/components/reference/selected/components/form-error-summary.html +4 -0
- package/examples/components/reference/selected/components/inline-edit.html +3 -0
- package/examples/components/reference/selected/components/kanban-board.html +53 -0
- package/examples/components/reference/selected/components/modal.html +2 -0
- package/examples/components/reference/selected/components/multi-select-picker.html +5 -0
- package/examples/components/reference/selected/components/pagination.html +3 -0
- package/examples/components/reference/selected/components/persistent-action-banner.html +4 -0
- package/examples/components/reference/selected/components/popconfirm.html +5 -0
- package/examples/components/reference/selected/components/popover-menu.html +3 -0
- package/examples/components/reference/selected/components/rich-text-toolbar.html +3 -0
- package/examples/components/reference/selected/components/save-status-indicator.html +2 -0
- package/examples/components/reference/selected/components/selectable-cards.html +3 -0
- package/examples/components/reference/selected/components/settings-rows.html +3 -0
- package/examples/components/reference/selected/components/sidebar-nav.html +4 -0
- package/examples/components/reference/selected/components/small-charts.html +5 -0
- package/examples/components/reference/selected/components/split-button.html +4 -0
- package/examples/components/reference/selected/components/split-panes.html +8 -0
- package/examples/components/reference/selected/components/stat-tiles.html +3 -0
- package/examples/components/reference/selected/components/toast-stack.html +5 -0
- package/examples/components/reference/selected/components/tree-view.html +4 -0
- package/examples/components/reference/selected/components/upload-dropzone.html +6 -0
- package/examples/components/reference/selected/components/wizard-shell.html +3 -0
- package/examples/components/reference/selected/corrections.css +11 -0
- package/examples/components/reference/selected/coverage.json +413 -0
- package/examples/components/reference/selected/gallery-build.mjs +49 -0
- package/examples/components/reference/selected/gallery-spec.json +12 -0
- package/examples/components/reference/selected/index.html +1 -0
- package/examples/components/reference/selected/kanban-comparison.json +6 -0
- package/examples/components/reference/selected/manifest.json +476 -0
- package/examples/components/reference/sha256.json +142 -0
- package/examples/components/reference/sources/diagonal-close.svg +1 -0
- package/examples/components/reference/sources/hyperclay/public-assets/css/hyperclay-app-source.css +614 -0
- package/examples/components/reference/sources/hyperclay/public-assets/js/app.js +94 -0
- package/examples/components/reference/sources/hyperclayjs/src/ui/theModal.js +897 -0
- package/examples/components/reference/sources/hypercms/scripts/build-theme.js +203 -0
- package/examples/components/reference/sources/hypercms/src/anchor.js +24 -0
- package/examples/components/reference/sources/hypercms/src/apply-loop.js +167 -0
- package/examples/components/reference/sources/hypercms/src/diagnostics.js +44 -0
- package/examples/components/reference/sources/hypercms/src/enhance.js +173 -0
- package/examples/components/reference/sources/hypercms/src/events.js +955 -0
- package/examples/components/reference/sources/hypercms/src/form-builder.js +518 -0
- package/examples/components/reference/sources/hypercms/src/form-rules.js +208 -0
- package/examples/components/reference/sources/hypercms/src/hooks.js +100 -0
- package/examples/components/reference/sources/hypercms/src/hypercms-bundle.js +10 -0
- package/examples/components/reference/sources/hypercms/src/hypercms.js +347 -0
- package/examples/components/reference/sources/hypercms/src/morph.js +10 -0
- package/examples/components/reference/sources/hypercms/src/path.js +61 -0
- package/examples/components/reference/sources/hypercms/src/place.js +131 -0
- package/examples/components/reference/sources/hypercms/src/platform.js +131 -0
- package/examples/components/reference/sources/hypercms/src/refresh.js +87 -0
- package/examples/components/reference/sources/hypercms/src/richclay-bridge.js +140 -0
- package/examples/components/reference/sources/hypercms/src/row-identity.js +111 -0
- package/examples/components/reference/sources/hypercms/src/scaffold.js +10 -0
- package/examples/components/reference/sources/hypercms/src/session.js +303 -0
- package/examples/components/reference/sources/hypercms/src/shell.js +248 -0
- package/examples/components/reference/sources/hypercms/src/styles.css +298 -0
- package/examples/components/reference/sources/hypercms/src/targets.js +144 -0
- package/examples/components/reference/sources/hypercms/src/templates.js +656 -0
- package/examples/components/reference/sources/hypercms/src/theme/pixel-quiet.overrides.css +761 -0
- package/examples/components/reference/sources/hypercms/src/theme.generated.css +1772 -0
- package/examples/components/reference/sources/hypercms/src/toggle.js +666 -0
- package/examples/components/reference/sources/hypercms/src/unresolved.js +211 -0
- package/examples/components/reference/sources/hypercms/src/vendor/mirk.vendor.js +212 -0
- package/examples/components/reference/sources/hypercms/src/views/inline-layer.js +421 -0
- package/examples/components/reference/sources/hypercms/src/views/inline.js +1072 -0
- package/examples/components/reference/sources/hypercms/src/views/sidebar.js +97 -0
- package/examples/components/reference/sources/modal-reference.html +301 -0
- package/examples/components/reference/sources/quickcrop/quickcrop.css +124 -0
- package/examples/components/reference/sources/quickcrop/quickcrop.js +400 -0
- package/examples/components/reference/sources/richclay/richclay.css +416 -0
- package/examples/components/reference/sources/richclay/richclay.js +2962 -0
- package/examples/components/reference/sources/richclay/src/a11y.js +67 -0
- package/examples/components/reference/sources/richclay/src/browser-global.js +7 -0
- package/examples/components/reference/sources/richclay/src/buttons.js +254 -0
- package/examples/components/reference/sources/richclay/src/hyperclay.js +470 -0
- package/examples/components/reference/sources/richclay/src/normalize.js +380 -0
- package/examples/components/reference/sources/richclay/src/richclay.js +1356 -0
- package/examples/components/reference/sources/richclay/src/sanitize.js +189 -0
- package/examples/components/reference/sources/richclay/src/styles.js +23 -0
- package/examples/components/reference/sources/richclay/src/toolbar-float.js +175 -0
- package/examples/components/reference/sources/richclay/src/toolbar.js +394 -0
- package/examples/components/reference/sources/richclay/src/vendor-bundle.js +15 -0
- package/examples/components/reference/sources/richclay/vendor/DOMPURIFY-LICENSE +202 -0
- package/examples/components/reference/sources/richclay/vendor/DOMPURIFY-LICENSE-MPL +373 -0
- package/examples/components/reference/sources/richclay/vendor/SQUIRE-LICENSE +21 -0
- package/examples/components/reference/sources/richclay/vendor/purify.es.mjs +2249 -0
- package/examples/components/reference/sources/richclay/vendor/purify.min.js +3 -0
- package/examples/components/reference/sources/richclay/vendor/squire.js +22 -0
- package/examples/components/reference/sources/richclay/vendor/squire.mjs +22 -0
- package/examples/components/reference/sources/richclay/vendor/squire.provenance.json +19 -0
- package/examples/components/rich-text-toolbar.html +43 -0
- package/examples/components/save-status-indicator.html +11 -0
- package/examples/components/selectable-cards.html +9 -0
- package/examples/components/settings-rows.html +10 -0
- package/examples/components/sidebar-nav.html +9 -0
- package/examples/components/small-charts.html +21 -0
- package/examples/components/split-button.html +13 -0
- package/examples/components/split-panes-editor.html +6 -0
- package/examples/components/split-panes.html +9 -0
- package/examples/components/stat-tiles.html +23 -0
- package/examples/components/toast-stack.html +21 -0
- package/examples/components/tree-view.html +9 -0
- package/examples/components/upload-dropzone.html +88 -0
- package/examples/components/wizard-shell.html +50 -0
- package/examples/datastar/index.html +38 -0
- package/examples/datastar/server.mjs +31 -0
- package/examples/fixtures/field-guide.pdf +14 -0
- package/examples/fixtures/workspace.jpg +0 -0
- package/examples/setup-peers.mjs +35 -0
- package/fonts/LICENSE-ibm-plex-mono.txt +93 -0
- package/fonts/LICENSE-ibm-plex-sans.txt +93 -0
- package/fonts/LICENSE-newsreader.txt +93 -0
- package/fonts/ibm-plex-mono-latin-400-normal.woff2 +0 -0
- package/fonts/ibm-plex-mono-latin-500-normal.woff2 +0 -0
- package/fonts/ibm-plex-mono-latin-600-normal.woff2 +0 -0
- package/fonts/ibm-plex-sans-latin-400-italic.woff2 +0 -0
- package/fonts/ibm-plex-sans-latin-400-normal.woff2 +0 -0
- package/fonts/ibm-plex-sans-latin-500-normal.woff2 +0 -0
- package/fonts/ibm-plex-sans-latin-600-normal.woff2 +0 -0
- package/fonts/newsreader-latin-opsz-italic.woff2 +0 -0
- package/fonts/newsreader-latin-opsz-normal.woff2 +0 -0
- package/icons/LICENSE +21 -0
- package/icons/house.json +71 -0
- package/icons/icons.d.ts +17 -0
- package/icons/icons.js +648 -0
- package/icons/icons.svg +126 -0
- package/icons/marks/build-tray.source.mjs +45 -0
- package/icons/marks/hyperclay-local.svg +11 -0
- package/icons/phosphor.json +53 -0
- package/icons/round.json +8 -0
- package/integrations/datastar.js +202 -0
- package/integrations/quickcrop.css +26 -0
- package/integrations/quickcrop.js +56 -0
- package/integrations/richclay.css +100 -0
- package/integrations/richclay.js +131 -0
- package/package.json +630 -0
- package/react/README.md +244 -0
- package/src/README.md +83 -0
- package/vendor/datastar/datastar-1.0.3.js +10 -0
- package/vendor/datastar/provenance.json +6 -0
- package/vendor/floating-ui/LICENSE-core +20 -0
- package/vendor/floating-ui/LICENSE-dom +20 -0
- package/vendor/floating-ui/floating-ui.core.umd.min.js +1 -0
- package/vendor/floating-ui/floating-ui.dom.umd.min.js +1 -0
- package/vendor/floating-ui/provenance.json +17 -0
- package/vendor/richclay/LICENSE +16 -0
- package/vendor/richclay/THIRD-PARTY-NOTICES.md +45 -0
- package/vendor/richclay/provenance.json +17 -0
- package/vendor/richclay/richclay.css +404 -0
- package/vendor/richclay/richclay.js +2940 -0
- package/vendor/richclay/vendor/DOMPURIFY-LICENSE +202 -0
- package/vendor/richclay/vendor/DOMPURIFY-LICENSE-MPL +373 -0
- package/vendor/richclay/vendor/SQUIRE-LICENSE +21 -0
- package/vendor/richclay/vendor/purify.min.js +3 -0
- package/vendor/richclay/vendor/squire.js +22 -0
- package/vendor/richclay/vendor/squire.provenance.json +30 -0
|
@@ -0,0 +1,1772 @@
|
|
|
1
|
+
/* GENERATED by scripts/build-theme.js from mirk-interface/mirk.css — DO NOT EDIT.
|
|
2
|
+
Source of truth: mirk-interface/mirk.css + src/theme/pixel-quiet.overrides.css.
|
|
3
|
+
Regenerate with: npm run build:theme */
|
|
4
|
+
|
|
5
|
+
/* ===== mirk-interface@2.2.0, scoped to .hcms-shell ===== */
|
|
6
|
+
/*
|
|
7
|
+
* mirk.css — the mirk UI kit, v2.
|
|
8
|
+
* Hand-written, no build. Fourteen form components as semantic BEM classes in
|
|
9
|
+
* @layer components, so utilities (Tailwind or your own) always override them
|
|
10
|
+
* with zero !important. Renders fully standalone; Tailwind is optional.
|
|
11
|
+
*
|
|
12
|
+
* Two hinges (see mirk-ui-guide.md):
|
|
13
|
+
* 1. Components live in @layer components → utilities win.
|
|
14
|
+
* 2. State serializes into the DOM (native attrs, :has(), inline --mirk-value)
|
|
15
|
+
* so document.documentElement.outerHTML round-trips every visible state.
|
|
16
|
+
*
|
|
17
|
+
* This @layer statement makes the file self-sufficient without Tailwind, and
|
|
18
|
+
* merges into Tailwind's own order (@layer theme, base, components, utilities)
|
|
19
|
+
* when present.
|
|
20
|
+
*/
|
|
21
|
+
@layer base, components;
|
|
22
|
+
|
|
23
|
+
@layer base {
|
|
24
|
+
/* Components are authored border-box (a 2px bevel must not grow the box). */
|
|
25
|
+
.hcms-shell *, .hcms-shell *::before, .hcms-shell *::after { box-sizing: border-box; }
|
|
26
|
+
.hcms-shell button, .hcms-shell input, .hcms-shell optgroup, .hcms-shell select, .hcms-shell textarea { margin: 0; }
|
|
27
|
+
|
|
28
|
+
@font-face {
|
|
29
|
+
font-family: 'Departure Mono';
|
|
30
|
+
src: url('https://cdn.jsdelivr.net/npm/mirk-interface@2.2.0/fonts/DepartureMono-1.500/DepartureMono-Regular.woff2') format('woff2');
|
|
31
|
+
font-weight: 400; font-style: normal; font-display: swap;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.hcms-shell { font-family: 'Departure Mono', ui-monospace, "Menlo", monospace; }
|
|
35
|
+
/* Preflight sets these to ui-monospace; keep them in Departure Mono. */
|
|
36
|
+
.hcms-shell pre, .hcms-shell code, .hcms-shell kbd, .hcms-shell samp { font-family: inherit; }
|
|
37
|
+
|
|
38
|
+
/* 28 tokens, one value each. light-dark() picks the side from color-scheme.
|
|
39
|
+
:root paints the DEFAULT theme — "Pixel Quiet" (see 0030): mirk's warm soul
|
|
40
|
+
with the volume down. The louder original palette is the opt-in
|
|
41
|
+
[data-theme="full-volume"] block below. */
|
|
42
|
+
.hcms-shell {
|
|
43
|
+
color-scheme: light dark; /* default: follow the OS */
|
|
44
|
+
|
|
45
|
+
--mirk-canvas: light-dark(#FDF8F0, #0B0C13);
|
|
46
|
+
--mirk-bg: light-dark(#FDF8F0, #11131E);
|
|
47
|
+
--mirk-fg: light-dark(#2B241B, #ECEAF2);
|
|
48
|
+
--mirk-accent: light-dark(#efefe5, #1D1F2F);
|
|
49
|
+
--mirk-destructive: light-dark(#C24A3A, #ff5566);
|
|
50
|
+
--mirk-focus-color: light-dark(#C7AE93, #4A506B);
|
|
51
|
+
--mirk-bevel-bg: light-dark(#FCF8F1, #1A1D2C);
|
|
52
|
+
--mirk-bevel-fg: light-dark(#2B241B, #ECEAF2);
|
|
53
|
+
--mirk-bevel-tl: light-dark(#F0E7D8, #2A2E42);
|
|
54
|
+
--mirk-bevel-br: light-dark(#E2D4BF, #14182A);
|
|
55
|
+
--mirk-bevel-hover-bg: light-dark(#F4ECDF, #202436);
|
|
56
|
+
--mirk-pill-inner-top: light-dark(#FBF6EE, #202436);
|
|
57
|
+
--mirk-input-border: light-dark(#D8C8AF, #353B52);
|
|
58
|
+
--mirk-placeholder-color: light-dark(#A8987F, #6A7090);
|
|
59
|
+
--mirk-ctrl-bg: light-dark(#8C7660, #5F6582);
|
|
60
|
+
--mirk-toggle-bg: light-dark(#EFDBBD, #3E4660);
|
|
61
|
+
--mirk-toggle-hi: light-dark(#F4EADA, #4E567A);
|
|
62
|
+
--mirk-toggle-lo: light-dark(#C2A87E, #262B42);
|
|
63
|
+
--mirk-mark-fg: light-dark(#6B5942, #C9CDE0);
|
|
64
|
+
--mirk-sortable-dot: light-dark(#DDCBB0, #353B52);
|
|
65
|
+
--mirk-sortable-shadow: light-dark(#C9B493, #0E1120);
|
|
66
|
+
--mirk-sortable-label: light-dark(#8C7B62, #8A90AB);
|
|
67
|
+
--mirk-sortable-placeholder: light-dark(#A8987F, #6A7090);
|
|
68
|
+
--mirk-slider-fill: light-dark(#F2E0BD, #2A2E42);
|
|
69
|
+
--mirk-slider-nub-bg: light-dark(#EFDBBD, #3E4660);
|
|
70
|
+
--mirk-slider-nub-hi: light-dark(#F4EADA, #4E567A);
|
|
71
|
+
--mirk-slider-nub-lo: light-dark(#C2A87E, #262B42);
|
|
72
|
+
|
|
73
|
+
/* Chip — the recovery/notification component reads from the kit's own tokens
|
|
74
|
+
via 5 slim hooks, so it matches the kit by default and reskins by overriding
|
|
75
|
+
a hook (not a rule). Each follows the theme (incl. the Full Volume variant)
|
|
76
|
+
and OS light/dark with no per-theme repaint; the one exception is the primary
|
|
77
|
+
fill, which the default (Pixel Quiet) leaves as the theme's fg ink while the
|
|
78
|
+
Full Volume variant tints it a warm brown in light (see below). */
|
|
79
|
+
--mirk-chip-surface: var(--mirk-bg); /* raised panel face */
|
|
80
|
+
--mirk-chip-edge: var(--mirk-input-border); /* panel + recess outline */
|
|
81
|
+
--mirk-chip-primary-bg: var(--mirk-fg); /* primary action fill — the theme's fg ink (Full Volume tints it warm brown in light) */
|
|
82
|
+
--mirk-chip-primary-fg: var(--mirk-bg);
|
|
83
|
+
--mirk-chip-alert: var(--mirk-destructive); /* icon + struck "now" value */
|
|
84
|
+
|
|
85
|
+
--mirk-radius: 5px; /* the "rounded" corner */
|
|
86
|
+
--mirk-focus-offset: 2px; /* non-color → can't ride light-dark() */
|
|
87
|
+
|
|
88
|
+
background: var(--mirk-canvas);
|
|
89
|
+
color: var(--mirk-fg);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* The one non-color token with a real light/dark split (was 2px / 3px). */
|
|
93
|
+
@media (prefers-color-scheme: dark) { .hcms-shell { --mirk-focus-offset: 3px; } }
|
|
94
|
+
|
|
95
|
+
/* Force a mode on any subtree with one attribute (class aliases for hosts that
|
|
96
|
+
prefer class-based theming and Tailwind's dark-variant convention). Each also
|
|
97
|
+
paints its own canvas so a wrapper visibly flips. */
|
|
98
|
+
.hcms-shell[data-theme="light"], .hcms-shell.light {
|
|
99
|
+
color-scheme: light; --mirk-focus-offset: 2px;
|
|
100
|
+
background: var(--mirk-canvas); color: var(--mirk-fg);
|
|
101
|
+
}
|
|
102
|
+
.hcms-shell[data-theme="dark"], .hcms-shell.dark {
|
|
103
|
+
color-scheme: dark; --mirk-focus-offset: 3px;
|
|
104
|
+
background: var(--mirk-canvas); color: var(--mirk-fg);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* Built-in brand variant — "Full Volume": mirk's original full-strength palette,
|
|
108
|
+
the loud pole of the volume axis (Pixel Quiet, now the default, is the quiet
|
|
109
|
+
end). Full-contrast bevel, warm cream / deep navy, crimson destructive.
|
|
110
|
+
Authored with light-dark() like :root, so it follows the OS and still flips
|
|
111
|
+
with .dark / .light. Opt in: data-theme="full-volume". Sits after :root
|
|
112
|
+
(equal specificity, source order wins). --mirk-radius / --mirk-focus-offset /
|
|
113
|
+
--mirk-ctrl-bg and the four shared --mirk-chip-* hooks inherit from :root
|
|
114
|
+
unchanged; only the tokens that differ from the default are re-declared here. */
|
|
115
|
+
.hcms-shell[data-theme="full-volume"] {
|
|
116
|
+
--mirk-canvas: light-dark(#F7F2EA, #0B0C13);
|
|
117
|
+
--mirk-bg: light-dark(#F7F2EA, #1D1F2F);
|
|
118
|
+
--mirk-fg: light-dark(#15120e, #F6F7F9);
|
|
119
|
+
--mirk-accent: light-dark(#efefe5, #232639);
|
|
120
|
+
--mirk-destructive: light-dark(#d4183d, #ff5566);
|
|
121
|
+
--mirk-focus-color: light-dark(#BBA288, #5A607F);
|
|
122
|
+
--mirk-bevel-bg: light-dark(#e9d3bd, #1D1F2F);
|
|
123
|
+
--mirk-bevel-fg: light-dark(#15120e, #F6F7F9);
|
|
124
|
+
--mirk-bevel-tl: light-dark(#f3ddc7, #474C65);
|
|
125
|
+
--mirk-bevel-br: light-dark(#c2ad95, #131725);
|
|
126
|
+
--mirk-bevel-hover-bg: light-dark(#dfc9b3, #232639);
|
|
127
|
+
--mirk-pill-inner-top: light-dark(#efdac7, #232639);
|
|
128
|
+
--mirk-input-border: light-dark(#957E65, #6E738E);
|
|
129
|
+
--mirk-placeholder-color: light-dark(#7F7366, #545973);
|
|
130
|
+
--mirk-toggle-bg: light-dark(#DFC9AF, #656D95);
|
|
131
|
+
--mirk-toggle-hi: light-dark(#E9D6C3, #7F87AD);
|
|
132
|
+
--mirk-toggle-lo: light-dark(#C7A88A, #505677);
|
|
133
|
+
--mirk-mark-fg: light-dark(#3F3225, #E1E3EA);
|
|
134
|
+
--mirk-sortable-dot: light-dark(#e2c5a6, #393f5b);
|
|
135
|
+
--mirk-sortable-shadow: light-dark(#c7a47f, #111527);
|
|
136
|
+
--mirk-sortable-label: light-dark(#231e18, #edeef2);
|
|
137
|
+
--mirk-sortable-placeholder: light-dark(#99826c, #6f7695);
|
|
138
|
+
--mirk-slider-fill: light-dark(#e9d3bd, #232639);
|
|
139
|
+
--mirk-slider-nub-bg: light-dark(#DFC9AF, #656D95);
|
|
140
|
+
--mirk-slider-nub-hi: light-dark(#E9D6C3, #7F87AD);
|
|
141
|
+
--mirk-slider-nub-lo: light-dark(#C7A88A, #505677);
|
|
142
|
+
/* :root (Pixel Quiet) leaves the chip primary as its own fg ink; the original
|
|
143
|
+
default tinted it a warm brown in light — restore that here. */
|
|
144
|
+
--mirk-chip-primary-bg: light-dark(#1C170E, var(--mirk-fg));
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/* Roll your own the same way — an explicit [data-theme] block is the escape hatch:
|
|
148
|
+
[data-theme="sunset"] { color-scheme: light; --mirk-accent: #f0a868; … } */
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
@layer components {
|
|
152
|
+
/* Visually hidden, still focusable/announced. The hidden native input behind
|
|
153
|
+
every custom control relies on it; Tailwind is optional now. */
|
|
154
|
+
.hcms-shell .mirk-sr-only {
|
|
155
|
+
position: absolute; width: 1px; height: 1px;
|
|
156
|
+
padding: 0; margin: -1px; overflow: hidden;
|
|
157
|
+
clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* ============================ BUTTON ============================ */
|
|
161
|
+
.hcms-shell .mirk-button {
|
|
162
|
+
display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem;
|
|
163
|
+
font: inherit; line-height: 1.5; cursor: pointer; user-select: none;
|
|
164
|
+
text-align: center;
|
|
165
|
+
color: var(--mirk-bevel-fg);
|
|
166
|
+
background: var(--mirk-bevel-bg);
|
|
167
|
+
border: 2px solid;
|
|
168
|
+
/* Raised bevel: light top+left, dark right+bottom. Shorthand is T R B L. */
|
|
169
|
+
border-color: var(--mirk-bevel-tl) var(--mirk-bevel-br) var(--mirk-bevel-br) var(--mirk-bevel-tl);
|
|
170
|
+
padding: 4px 14px 5px; /* medium */
|
|
171
|
+
outline: none;
|
|
172
|
+
}
|
|
173
|
+
.hcms-shell .mirk-button__label { white-space: nowrap; user-select: none; display: inline-block; }
|
|
174
|
+
|
|
175
|
+
/* States, written once, shared by every size and shape. */
|
|
176
|
+
.hcms-shell .mirk-button:hover { background-color: var(--mirk-bevel-hover-bg); }
|
|
177
|
+
.hcms-shell .mirk-button:active {
|
|
178
|
+
border-color: var(--mirk-bevel-br) var(--mirk-bevel-tl) var(--mirk-bevel-tl) var(--mirk-bevel-br);
|
|
179
|
+
}
|
|
180
|
+
.hcms-shell .mirk-button:not(.mirk-button--round):active .mirk-button__label { translate: 1.5px 1.5px; }
|
|
181
|
+
/* Direct focus (a real <button>) or a focus-visible descendant (a <label>
|
|
182
|
+
wrapping a hidden input, as the file/image upload triggers do). */
|
|
183
|
+
.hcms-shell .mirk-button:focus-visible, .hcms-shell .mirk-button:has(:focus-visible) {
|
|
184
|
+
outline: 1px solid var(--mirk-focus-color); outline-offset: var(--mirk-focus-offset);
|
|
185
|
+
}
|
|
186
|
+
.hcms-shell .mirk-button:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
187
|
+
|
|
188
|
+
/* Sizes set padding + font (rect); round re-homes padding to the label below. */
|
|
189
|
+
.hcms-shell .mirk-button--small { padding: 3px 12px; font-size: 14px; }
|
|
190
|
+
.hcms-shell .mirk-button--large { padding: 4px 17px 7px; font-size: 18px; border-width: 3px; }
|
|
191
|
+
|
|
192
|
+
/* Round register: a gradient pill frame with the label as the inner fill. */
|
|
193
|
+
.hcms-shell .mirk-button--round {
|
|
194
|
+
border: none; padding: 2px; border-radius: 14px;
|
|
195
|
+
background-color: var(--mirk-canvas);
|
|
196
|
+
background-image: linear-gradient(to top in oklab, var(--mirk-bevel-br), var(--mirk-bevel-tl));
|
|
197
|
+
opacity: 0.9; transition: opacity 0.15s cubic-bezier(0.4, 0, 0.2, 1);
|
|
198
|
+
}
|
|
199
|
+
.hcms-shell .mirk-button--round:hover { opacity: 1; }
|
|
200
|
+
.hcms-shell .mirk-button--round:active {
|
|
201
|
+
background-image: linear-gradient(to bottom in oklab, var(--mirk-bevel-br), var(--mirk-bevel-tl));
|
|
202
|
+
}
|
|
203
|
+
.hcms-shell .mirk-button--round .mirk-button__label {
|
|
204
|
+
display: flex; align-items: center; gap: 0.5rem;
|
|
205
|
+
padding: 4px 17px 6px; border-radius: 12px;
|
|
206
|
+
color: var(--mirk-bevel-fg);
|
|
207
|
+
background-color: var(--mirk-bevel-bg);
|
|
208
|
+
background-image: linear-gradient(to top in oklab, var(--mirk-bevel-bg), var(--mirk-pill-inner-top));
|
|
209
|
+
}
|
|
210
|
+
.hcms-shell .mirk-button--round.mirk-button--small { border-radius: 12px; }
|
|
211
|
+
.hcms-shell .mirk-button--round.mirk-button--small .mirk-button__label { padding: 2px 14px; border-radius: 10px; }
|
|
212
|
+
.hcms-shell .mirk-button--round.mirk-button--large { border-radius: 16px; }
|
|
213
|
+
.hcms-shell .mirk-button--round.mirk-button--large .mirk-button__label { padding: 7px 24px 9px; border-radius: 14px; }
|
|
214
|
+
|
|
215
|
+
/* Quiet: a borderless text button (transparent border keeps the hit area + the
|
|
216
|
+
baseline aligned with neighbouring bevel buttons). For tertiary actions. */
|
|
217
|
+
.hcms-shell .mirk-button--quiet {
|
|
218
|
+
background: none; background-image: none;
|
|
219
|
+
border-color: transparent; color: var(--mirk-placeholder-color);
|
|
220
|
+
}
|
|
221
|
+
.hcms-shell .mirk-button--quiet:hover { background: none; color: var(--mirk-fg); }
|
|
222
|
+
.hcms-shell .mirk-button--quiet:active { border-color: transparent; }
|
|
223
|
+
|
|
224
|
+
/* ============================ TEXT INPUT ============================ */
|
|
225
|
+
.hcms-shell .mirk-input {
|
|
226
|
+
width: 100%;
|
|
227
|
+
background: var(--mirk-bevel-bg); color: var(--mirk-bevel-fg);
|
|
228
|
+
border: 1px solid var(--mirk-input-border);
|
|
229
|
+
padding: 5px 14px 6px; /* medium */
|
|
230
|
+
font: inherit; line-height: 1.5; border-radius: 0; outline: none;
|
|
231
|
+
}
|
|
232
|
+
.hcms-shell .mirk-input::placeholder { color: var(--mirk-placeholder-color); }
|
|
233
|
+
.hcms-shell .mirk-input:focus-visible {
|
|
234
|
+
outline: 1px solid var(--mirk-focus-color); outline-offset: var(--mirk-focus-offset);
|
|
235
|
+
}
|
|
236
|
+
.hcms-shell .mirk-input--small { padding: 4px 12px; font-size: 14px; }
|
|
237
|
+
.hcms-shell .mirk-input--large { padding: 6px 17px 9px; font-size: 18px; }
|
|
238
|
+
.hcms-shell .mirk-input--rounded { border-radius: var(--mirk-radius); }
|
|
239
|
+
|
|
240
|
+
/* ============================ TEXTAREA ============================ */
|
|
241
|
+
.hcms-shell .mirk-textarea {
|
|
242
|
+
width: 100%;
|
|
243
|
+
background: var(--mirk-bevel-bg); color: var(--mirk-bevel-fg);
|
|
244
|
+
border: 1px solid var(--mirk-input-border);
|
|
245
|
+
padding: 6px 17px 9px; font: inherit; font-size: 18px; line-height: 1.5;
|
|
246
|
+
border-radius: 0; outline: none; resize: vertical;
|
|
247
|
+
}
|
|
248
|
+
.hcms-shell .mirk-textarea::placeholder { color: var(--mirk-placeholder-color); }
|
|
249
|
+
.hcms-shell .mirk-textarea:focus-visible {
|
|
250
|
+
outline: 1px solid var(--mirk-focus-color); outline-offset: var(--mirk-focus-offset);
|
|
251
|
+
}
|
|
252
|
+
.hcms-shell .mirk-textarea--rounded { border-radius: var(--mirk-radius); }
|
|
253
|
+
|
|
254
|
+
/* ============================ NUMBER ============================ */
|
|
255
|
+
.hcms-shell .mirk-number {
|
|
256
|
+
display: flex; align-items: stretch; width: 100%;
|
|
257
|
+
background: var(--mirk-bevel-bg);
|
|
258
|
+
border: 1px solid var(--mirk-input-border); border-radius: 0;
|
|
259
|
+
}
|
|
260
|
+
.hcms-shell .mirk-number:has(:focus-visible) {
|
|
261
|
+
outline: 1px solid var(--mirk-focus-color); outline-offset: var(--mirk-focus-offset);
|
|
262
|
+
}
|
|
263
|
+
.hcms-shell .mirk-number__input {
|
|
264
|
+
flex: 1; min-width: 0; background: transparent; color: var(--mirk-bevel-fg);
|
|
265
|
+
padding: 5px 10px 6px 14px; /* medium */
|
|
266
|
+
font: inherit; line-height: 1.5; outline: none;
|
|
267
|
+
appearance: textfield; -webkit-appearance: textfield;
|
|
268
|
+
}
|
|
269
|
+
.hcms-shell .mirk-number__input::-webkit-outer-spin-button, .hcms-shell .mirk-number__input::-webkit-inner-spin-button { -webkit-appearance: none; appearance: none; }
|
|
270
|
+
.hcms-shell .mirk-number__steps { display: flex; flex-direction: column; padding: 2px; gap: 2px; }
|
|
271
|
+
.hcms-shell .mirk-number__step {
|
|
272
|
+
flex: 1; cursor: pointer; line-height: 1; padding: 0 10px; font-size: 9px; /* medium */
|
|
273
|
+
display: flex; align-items: center; justify-content: center;
|
|
274
|
+
background: var(--mirk-bevel-bg); outline: none;
|
|
275
|
+
border: 2px solid;
|
|
276
|
+
border-color: var(--mirk-bevel-tl) var(--mirk-bevel-br) var(--mirk-bevel-br) var(--mirk-bevel-tl);
|
|
277
|
+
}
|
|
278
|
+
.hcms-shell .mirk-number__step:hover { background: var(--mirk-bevel-hover-bg); }
|
|
279
|
+
.hcms-shell .mirk-number__step:active {
|
|
280
|
+
border-color: var(--mirk-bevel-br) var(--mirk-bevel-tl) var(--mirk-bevel-tl) var(--mirk-bevel-br);
|
|
281
|
+
}
|
|
282
|
+
.hcms-shell .mirk-number__step:focus-visible { outline: 1px solid var(--mirk-focus-color); outline-offset: 1px; }
|
|
283
|
+
|
|
284
|
+
.hcms-shell .mirk-number--small .mirk-number__input { padding: 4px 8px 4px 12px; font-size: 14px; }
|
|
285
|
+
.hcms-shell .mirk-number--small .mirk-number__step { padding: 0 8px; font-size: 8px; }
|
|
286
|
+
.hcms-shell .mirk-number--large .mirk-number__input { padding: 6px 12px 9px 17px; font-size: 18px; }
|
|
287
|
+
.hcms-shell .mirk-number--large .mirk-number__step { padding: 0 12px; font-size: 10px; }
|
|
288
|
+
|
|
289
|
+
.hcms-shell .mirk-number--rounded { border-radius: var(--mirk-radius); }
|
|
290
|
+
.hcms-shell .mirk-number--rounded .mirk-number__step { border-radius: 3px; }
|
|
291
|
+
|
|
292
|
+
/* ============================ SELECT / DROPDOWN ============================ */
|
|
293
|
+
/* Keeps appearance:none + a real chevron (renders identically everywhere today);
|
|
294
|
+
base-select/::picker is a future enhancement. */
|
|
295
|
+
.hcms-shell .mirk-select { position: relative; }
|
|
296
|
+
.hcms-shell .mirk-select__field {
|
|
297
|
+
width: 100%; appearance: none; -webkit-appearance: none;
|
|
298
|
+
background: var(--mirk-bevel-bg); color: var(--mirk-bevel-fg);
|
|
299
|
+
border: 2px solid;
|
|
300
|
+
border-color: var(--mirk-bevel-tl) var(--mirk-bevel-br) var(--mirk-bevel-br) var(--mirk-bevel-tl);
|
|
301
|
+
padding: 4px 40px 5px 14px; /* medium */
|
|
302
|
+
font: inherit; line-height: 1.5; border-radius: 0; outline: none;
|
|
303
|
+
}
|
|
304
|
+
.hcms-shell .mirk-select__field:focus-visible {
|
|
305
|
+
outline: 1px solid var(--mirk-focus-color); outline-offset: var(--mirk-focus-offset);
|
|
306
|
+
}
|
|
307
|
+
.hcms-shell .mirk-select__chevron {
|
|
308
|
+
pointer-events: none; position: absolute; top: 50%; right: 14px; /* medium */
|
|
309
|
+
translate: 0 -50%; rotate: 90deg; display: inline-block; line-height: 1; font-size: 20px;
|
|
310
|
+
}
|
|
311
|
+
.hcms-shell .mirk-select--small .mirk-select__field { padding: 3px 36px 3px 12px; font-size: 14px; }
|
|
312
|
+
.hcms-shell .mirk-select--small .mirk-select__chevron { right: 12px; font-size: 18px; }
|
|
313
|
+
.hcms-shell .mirk-select--large .mirk-select__field { padding: 4px 48px 7px 17px; font-size: 18px; border-width: 3px; }
|
|
314
|
+
.hcms-shell .mirk-select--large .mirk-select__chevron { right: 16px; font-size: 24px; }
|
|
315
|
+
|
|
316
|
+
/* Round: gradient pill frame around a borderless, pill-filled select. */
|
|
317
|
+
.hcms-shell .mirk-select--round .mirk-select__frame {
|
|
318
|
+
padding: 2px; border-radius: 14px; /* medium */
|
|
319
|
+
background-color: var(--mirk-canvas);
|
|
320
|
+
background-image: linear-gradient(to top in oklab, var(--mirk-bevel-br), var(--mirk-bevel-tl));
|
|
321
|
+
}
|
|
322
|
+
.hcms-shell .mirk-select--round .mirk-select__frame:has(:focus-visible) {
|
|
323
|
+
outline: 1px solid var(--mirk-focus-color); outline-offset: var(--mirk-focus-offset);
|
|
324
|
+
}
|
|
325
|
+
.hcms-shell .mirk-select--round .mirk-select__field {
|
|
326
|
+
border: none; background-color: transparent;
|
|
327
|
+
background-image: linear-gradient(to top in oklab, var(--mirk-bevel-bg), var(--mirk-pill-inner-top));
|
|
328
|
+
border-radius: 12px; padding: 4px 40px 6px 17px; /* medium */
|
|
329
|
+
}
|
|
330
|
+
.hcms-shell .mirk-select--round.mirk-select--small .mirk-select__frame { border-radius: 12px; }
|
|
331
|
+
.hcms-shell .mirk-select--round.mirk-select--small .mirk-select__field { border-radius: 10px; padding: 2px 36px 2px 14px; }
|
|
332
|
+
.hcms-shell .mirk-select--round.mirk-select--large .mirk-select__frame { border-radius: 16px; }
|
|
333
|
+
.hcms-shell .mirk-select--round.mirk-select--large .mirk-select__field { border-radius: 14px; padding: 7px 48px 9px 24px; }
|
|
334
|
+
.hcms-shell .mirk-select--round.mirk-select--large .mirk-select__chevron { right: 16px; font-size: 24px; }
|
|
335
|
+
|
|
336
|
+
/* ============================ CHECKBOX ============================ */
|
|
337
|
+
.hcms-shell .mirk-checkbox { display: inline-flex; align-items: center; gap: 0.75rem; cursor: pointer; width: fit-content; }
|
|
338
|
+
.hcms-shell .mirk-checkbox__box {
|
|
339
|
+
position: relative; flex-shrink: 0; width: 22px; height: 22px;
|
|
340
|
+
display: flex; align-items: center; justify-content: center; border-radius: 0;
|
|
341
|
+
background: var(--mirk-bevel-bg);
|
|
342
|
+
border: 2px solid;
|
|
343
|
+
border-color: var(--mirk-bevel-tl) var(--mirk-bevel-br) var(--mirk-bevel-br) var(--mirk-bevel-tl);
|
|
344
|
+
}
|
|
345
|
+
.hcms-shell .mirk-checkbox__mark {
|
|
346
|
+
opacity: 0; display: block; width: 6px; height: 12px;
|
|
347
|
+
border-right: 2.5px solid var(--mirk-mark-fg); border-bottom: 2.5px solid var(--mirk-mark-fg);
|
|
348
|
+
rotate: 45deg; translate: 0.5px -1.5px;
|
|
349
|
+
}
|
|
350
|
+
.hcms-shell .mirk-checkbox__label { font-size: 18px; line-height: 1.5; }
|
|
351
|
+
|
|
352
|
+
.hcms-shell .mirk-checkbox:has(:checked) .mirk-checkbox__box { border-color: var(--mirk-input-border); }
|
|
353
|
+
.hcms-shell .mirk-checkbox:has(:checked) .mirk-checkbox__mark { opacity: 1; }
|
|
354
|
+
.hcms-shell .mirk-checkbox:has(:focus-visible) .mirk-checkbox__box {
|
|
355
|
+
outline: 1px solid var(--mirk-focus-color); outline-offset: var(--mirk-focus-offset);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
.hcms-shell .mirk-checkbox--small { gap: 0.5rem; }
|
|
359
|
+
.hcms-shell .mirk-checkbox--small .mirk-checkbox__box { width: 18px; height: 18px; }
|
|
360
|
+
.hcms-shell .mirk-checkbox--small .mirk-checkbox__mark {
|
|
361
|
+
width: 5px; height: 10px;
|
|
362
|
+
border-right-width: 2px; border-bottom-width: 2px; translate: 0.5px -1px;
|
|
363
|
+
}
|
|
364
|
+
.hcms-shell .mirk-checkbox--small .mirk-checkbox__label { font-size: 14px; }
|
|
365
|
+
|
|
366
|
+
/* ============================ RADIO ============================ */
|
|
367
|
+
.hcms-shell .mirk-radio { display: inline-flex; align-items: center; gap: 0.75rem; cursor: pointer; width: fit-content; }
|
|
368
|
+
.hcms-shell .mirk-radio__ring {
|
|
369
|
+
position: relative; flex-shrink: 0; width: 25px; height: 25px; border-radius: 9999px;
|
|
370
|
+
background-image: linear-gradient(to top in oklab, var(--mirk-bevel-br), var(--mirk-bevel-tl));
|
|
371
|
+
}
|
|
372
|
+
.hcms-shell .mirk-radio__fill {
|
|
373
|
+
display: block; position: absolute; inset: 2px; border-radius: 9999px;
|
|
374
|
+
background-image: linear-gradient(to top in oklab, var(--mirk-bevel-bg), var(--mirk-pill-inner-top));
|
|
375
|
+
}
|
|
376
|
+
.hcms-shell .mirk-radio__dot {
|
|
377
|
+
display: none; position: absolute; top: 50%; left: 50%; translate: -50% -50%;
|
|
378
|
+
width: 9px; height: 9px; border-radius: 9999px; background: var(--mirk-mark-fg);
|
|
379
|
+
}
|
|
380
|
+
.hcms-shell .mirk-radio__label { font-size: 18px; line-height: 1.5; }
|
|
381
|
+
|
|
382
|
+
.hcms-shell .mirk-radio:has(:checked) .mirk-radio__ring {
|
|
383
|
+
background-image: none; background-color: var(--mirk-bevel-bg);
|
|
384
|
+
border: 2px solid var(--mirk-input-border);
|
|
385
|
+
}
|
|
386
|
+
.hcms-shell .mirk-radio:has(:checked) .mirk-radio__fill { display: none; }
|
|
387
|
+
.hcms-shell .mirk-radio:has(:checked) .mirk-radio__dot { display: block; }
|
|
388
|
+
.hcms-shell .mirk-radio:has(:focus-visible) .mirk-radio__ring {
|
|
389
|
+
outline: 1px solid var(--mirk-focus-color); outline-offset: var(--mirk-focus-offset);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
.hcms-shell .mirk-radio--small { gap: 0.5rem; }
|
|
393
|
+
.hcms-shell .mirk-radio--small .mirk-radio__ring { width: 20px; height: 20px; }
|
|
394
|
+
.hcms-shell .mirk-radio--small .mirk-radio__dot { width: 7px; height: 7px; }
|
|
395
|
+
.hcms-shell .mirk-radio--small .mirk-radio__label { font-size: 14px; }
|
|
396
|
+
|
|
397
|
+
/* ============================ TOGGLE ============================ */
|
|
398
|
+
.hcms-shell .mirk-toggle { display: inline-flex; align-items: center; gap: 0.75rem; cursor: pointer; width: fit-content; }
|
|
399
|
+
.hcms-shell .mirk-toggle__track {
|
|
400
|
+
position: relative; flex-shrink: 0; width: 49px; height: 27px; border-radius: 0;
|
|
401
|
+
background: var(--mirk-canvas); /* own recessed channel, like the slider track — never the host page (0033) */
|
|
402
|
+
border: 1px solid var(--mirk-input-border);
|
|
403
|
+
}
|
|
404
|
+
.hcms-shell .mirk-toggle__thumb {
|
|
405
|
+
position: absolute; top: 3px; left: 3px; width: 19px; height: 19px;
|
|
406
|
+
background-color: var(--mirk-toggle-bg);
|
|
407
|
+
border: 2px solid;
|
|
408
|
+
border-color: var(--mirk-toggle-hi) var(--mirk-toggle-lo) var(--mirk-toggle-lo) var(--mirk-toggle-hi);
|
|
409
|
+
transition-property: transform, translate, scale, rotate;
|
|
410
|
+
transition-duration: 0.15s; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
411
|
+
}
|
|
412
|
+
.hcms-shell .mirk-toggle__label { font-size: 18px; line-height: 1.5; }
|
|
413
|
+
|
|
414
|
+
.hcms-shell .mirk-toggle:has(:checked) .mirk-toggle__thumb { translate: 22px; }
|
|
415
|
+
.hcms-shell .mirk-toggle:has(:focus-visible) .mirk-toggle__track {
|
|
416
|
+
outline: 1px solid var(--mirk-focus-color); outline-offset: var(--mirk-focus-offset);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
.hcms-shell .mirk-toggle--round .mirk-toggle__track { width: 50px; height: 29px; border-radius: 9999px; }
|
|
420
|
+
.hcms-shell .mirk-toggle--round .mirk-toggle__thumb {
|
|
421
|
+
width: 21px; height: 21px; border: none; border-radius: 9999px;
|
|
422
|
+
background-color: transparent;
|
|
423
|
+
background-image: linear-gradient(to top in oklab, var(--mirk-toggle-lo), var(--mirk-toggle-hi));
|
|
424
|
+
}
|
|
425
|
+
.hcms-shell .mirk-toggle--round .mirk-toggle__thumb::after {
|
|
426
|
+
content: ""; position: absolute; inset: 2px; border-radius: 9999px; background: var(--mirk-toggle-bg);
|
|
427
|
+
}
|
|
428
|
+
.hcms-shell .mirk-toggle--round:has(:checked) .mirk-toggle__thumb { translate: 21px; }
|
|
429
|
+
|
|
430
|
+
.hcms-shell .mirk-toggle--small { gap: 0.5rem; }
|
|
431
|
+
.hcms-shell .mirk-toggle--small .mirk-toggle__track { width: 42px; height: 23px; }
|
|
432
|
+
.hcms-shell .mirk-toggle--small .mirk-toggle__thumb { top: 2px; left: 2px; width: 17px; height: 17px; }
|
|
433
|
+
.hcms-shell .mirk-toggle--small:has(:checked) .mirk-toggle__thumb { translate: 19px; }
|
|
434
|
+
.hcms-shell .mirk-toggle--small .mirk-toggle__label { font-size: 14px; }
|
|
435
|
+
.hcms-shell .mirk-toggle--round.mirk-toggle--small .mirk-toggle__track { width: 43px; height: 25px; }
|
|
436
|
+
.hcms-shell .mirk-toggle--round.mirk-toggle--small .mirk-toggle__thumb { width: 19px; height: 19px; }
|
|
437
|
+
.hcms-shell .mirk-toggle--round.mirk-toggle--small:has(:checked) .mirk-toggle__thumb { translate: 18px; }
|
|
438
|
+
|
|
439
|
+
/* ============================ SLIDER ============================ */
|
|
440
|
+
.hcms-shell .mirk-slider { position: relative; height: 32px; width: 100%; --mirk-value: 0%; }
|
|
441
|
+
.hcms-shell .mirk-slider__input {
|
|
442
|
+
position: absolute; inset: 0; width: 100%; height: 100%;
|
|
443
|
+
opacity: 0; cursor: pointer; z-index: 10;
|
|
444
|
+
}
|
|
445
|
+
.hcms-shell .mirk-slider__track {
|
|
446
|
+
position: absolute; left: 0; right: 0; top: 50%; translate: 0 -50%; height: 12px;
|
|
447
|
+
background: var(--mirk-canvas); border: 1px solid var(--mirk-input-border); overflow: hidden;
|
|
448
|
+
}
|
|
449
|
+
.hcms-shell .mirk-slider__fill { height: 100%; width: var(--mirk-value); background: var(--mirk-slider-fill); }
|
|
450
|
+
.hcms-shell .mirk-slider__nub {
|
|
451
|
+
position: absolute; top: 50%; left: var(--mirk-value); translate: -50% -50%;
|
|
452
|
+
width: 21px; height: 21px; pointer-events: none;
|
|
453
|
+
background-color: var(--mirk-slider-nub-bg);
|
|
454
|
+
border: 2px solid;
|
|
455
|
+
border-color: var(--mirk-slider-nub-hi) var(--mirk-slider-nub-lo) var(--mirk-slider-nub-lo) var(--mirk-slider-nub-hi);
|
|
456
|
+
}
|
|
457
|
+
.hcms-shell .mirk-slider__input:focus-visible ~ .mirk-slider__nub {
|
|
458
|
+
outline: 1px solid var(--mirk-focus-color); outline-offset: var(--mirk-focus-offset);
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
.hcms-shell .mirk-slider--round .mirk-slider__track { height: 10px; border-radius: 9999px; }
|
|
462
|
+
.hcms-shell .mirk-slider--round .mirk-slider__nub {
|
|
463
|
+
width: 24px; height: 24px; border: none; border-radius: 9999px;
|
|
464
|
+
background-color: transparent;
|
|
465
|
+
background-image: linear-gradient(to top in oklab, var(--mirk-slider-nub-lo), var(--mirk-slider-nub-hi));
|
|
466
|
+
}
|
|
467
|
+
.hcms-shell .mirk-slider--round .mirk-slider__nub::after {
|
|
468
|
+
content: ""; position: absolute; inset: 2px; border-radius: 9999px; background: var(--mirk-slider-nub-bg);
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
.hcms-shell .mirk-slider--small { height: 24px; }
|
|
472
|
+
.hcms-shell .mirk-slider--small .mirk-slider__track { height: 8px; }
|
|
473
|
+
.hcms-shell .mirk-slider--small .mirk-slider__nub { width: 16px; height: 16px; }
|
|
474
|
+
.hcms-shell .mirk-slider--round.mirk-slider--small .mirk-slider__track { height: 7px; }
|
|
475
|
+
.hcms-shell .mirk-slider--round.mirk-slider--small .mirk-slider__nub { width: 18px; height: 18px; }
|
|
476
|
+
|
|
477
|
+
/* ============================ DATE ============================ */
|
|
478
|
+
.hcms-shell .mirk-date { position: relative; }
|
|
479
|
+
.hcms-shell .mirk-date__field {
|
|
480
|
+
width: 100%; background: var(--mirk-bevel-bg); color: var(--mirk-bevel-fg);
|
|
481
|
+
border: 1px solid var(--mirk-input-border);
|
|
482
|
+
padding: 6px 44px 9px 17px; font: inherit; font-size: 18px; line-height: 1.5;
|
|
483
|
+
border-radius: 0; outline: none;
|
|
484
|
+
}
|
|
485
|
+
.hcms-shell .mirk-date__field:focus-visible {
|
|
486
|
+
outline: 1px solid var(--mirk-focus-color); outline-offset: var(--mirk-focus-offset);
|
|
487
|
+
}
|
|
488
|
+
.hcms-shell .mirk-date__field::-webkit-calendar-picker-indicator {
|
|
489
|
+
opacity: 0; position: absolute; right: 0; top: 0; bottom: 0; width: 44px; margin: 0; cursor: pointer;
|
|
490
|
+
}
|
|
491
|
+
.hcms-shell .mirk-date__field::-webkit-inner-spin-button { -webkit-appearance: none; appearance: none; }
|
|
492
|
+
.hcms-shell .mirk-date__field::-webkit-clear-button { -webkit-appearance: none; appearance: none; }
|
|
493
|
+
.hcms-shell .mirk-date__icon {
|
|
494
|
+
pointer-events: none; position: absolute; right: 16px; top: 50%; translate: 0 -50%;
|
|
495
|
+
}
|
|
496
|
+
.hcms-shell .mirk-date--rounded .mirk-date__field { border-radius: var(--mirk-radius); }
|
|
497
|
+
|
|
498
|
+
.hcms-shell .mirk-date--small .mirk-date__field { padding: 4px 36px 4px 12px; font-size: 14px; }
|
|
499
|
+
.hcms-shell .mirk-date--small .mirk-date__field::-webkit-calendar-picker-indicator { width: 36px; }
|
|
500
|
+
.hcms-shell .mirk-date--small .mirk-date__icon { right: 12px; }
|
|
501
|
+
|
|
502
|
+
/* The native file/image inputs are visually hidden; their styled label drives
|
|
503
|
+
them, and the focus ring rides :has(:focus-visible) on button or container. */
|
|
504
|
+
.hcms-shell .mirk-file__input, .hcms-shell .mirk-image__input {
|
|
505
|
+
position: absolute; width: 1px; height: 1px;
|
|
506
|
+
padding: 0; margin: -1px; overflow: hidden;
|
|
507
|
+
clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/* ============================ FILE ============================ */
|
|
511
|
+
.hcms-shell .mirk-file { display: flex; align-items: center; gap: 0.75rem; width: 100%; }
|
|
512
|
+
.hcms-shell .mirk-file__name {
|
|
513
|
+
color: var(--mirk-placeholder-color); font-size: 18px; line-height: 1.5;
|
|
514
|
+
min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
515
|
+
}
|
|
516
|
+
.hcms-shell .mirk-file__name[data-filled] { color: var(--mirk-bevel-fg); }
|
|
517
|
+
|
|
518
|
+
/* Compact: a shared bordered container holds a smaller button + the name. */
|
|
519
|
+
.hcms-shell .mirk-file--compact {
|
|
520
|
+
padding: 4px 8px; background: var(--mirk-bevel-bg);
|
|
521
|
+
border: 1px solid var(--mirk-input-border); border-radius: 0;
|
|
522
|
+
}
|
|
523
|
+
.hcms-shell .mirk-file--compact:has(:focus-visible) {
|
|
524
|
+
outline: 1px solid var(--mirk-focus-color); outline-offset: var(--mirk-focus-offset);
|
|
525
|
+
}
|
|
526
|
+
/* The upload trigger is a .mirk-button; nudge it onto the container's left
|
|
527
|
+
border so the bevel sits flush (covers compact and round-compact). */
|
|
528
|
+
.hcms-shell .mirk-file--compact .mirk-button { margin-left: -1px; }
|
|
529
|
+
.hcms-shell .mirk-file--compact .mirk-file__name { font-size: 16px; }
|
|
530
|
+
.hcms-shell .mirk-file--compact.mirk-file--round { border-radius: 15px; }
|
|
531
|
+
|
|
532
|
+
/* Filled: the name slot becomes a link to the chosen file, beside a circular ×
|
|
533
|
+
to clear it: a 1px ring over a bevel fill that turns destructive on hover.
|
|
534
|
+
Empty keeps the placeholder span. */
|
|
535
|
+
.hcms-shell a.mirk-file__name { text-decoration: underline; text-underline-offset: 2px; }
|
|
536
|
+
.hcms-shell .mirk-file__remove {
|
|
537
|
+
appearance: none; -webkit-appearance: none; flex-shrink: 0;
|
|
538
|
+
width: 18px; height: 18px; border-radius: 50%;
|
|
539
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
540
|
+
margin: 0; padding: 0; cursor: pointer; line-height: 0;
|
|
541
|
+
color: var(--mirk-bevel-fg); background: var(--mirk-bevel-bg);
|
|
542
|
+
border: 1px solid var(--mirk-input-border);
|
|
543
|
+
}
|
|
544
|
+
.hcms-shell .mirk-file__remove svg { display: block; width: 66%; height: 66%; }
|
|
545
|
+
.hcms-shell .mirk-file__remove:hover { border-color: var(--mirk-destructive); color: var(--mirk-destructive); }
|
|
546
|
+
|
|
547
|
+
/* Small: tighter name + gap + remove ×; pair the trigger with mirk-button--small.
|
|
548
|
+
Composes with --compact (densest) and --round. */
|
|
549
|
+
.hcms-shell .mirk-file--small { gap: 0.5rem; }
|
|
550
|
+
.hcms-shell .mirk-file--small .mirk-file__name { font-size: 14px; }
|
|
551
|
+
.hcms-shell .mirk-file--small .mirk-file__remove { width: 16px; height: 16px; }
|
|
552
|
+
.hcms-shell .mirk-file--small.mirk-file--compact { padding: 3px 8px; }
|
|
553
|
+
.hcms-shell .mirk-file--small.mirk-file--compact .mirk-file__name { font-size: 13px; }
|
|
554
|
+
|
|
555
|
+
/* ============================ IMAGE ============================ */
|
|
556
|
+
.hcms-shell .mirk-image { display: flex; flex-direction: column; gap: 0.5rem; }
|
|
557
|
+
.hcms-shell .mirk-image__frame {
|
|
558
|
+
position: relative; width: 120px; height: 120px; overflow: hidden; border-radius: 0;
|
|
559
|
+
display: flex; align-items: center; justify-content: center;
|
|
560
|
+
background: var(--mirk-bevel-bg); border: 1px solid var(--mirk-input-border);
|
|
561
|
+
color: var(--mirk-placeholder-color); font-size: 14px; line-height: 1.5;
|
|
562
|
+
}
|
|
563
|
+
.hcms-shell .mirk-image__preview { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
|
|
564
|
+
.hcms-shell .mirk-image--rounded .mirk-image__frame { border-radius: var(--mirk-radius); }
|
|
565
|
+
/* The upload trigger is a .mirk-button; keep it hugging its label instead of
|
|
566
|
+
stretching to fill this column-flex container. */
|
|
567
|
+
.hcms-shell .mirk-image .mirk-button { width: fit-content; }
|
|
568
|
+
|
|
569
|
+
/* Compact: a focused 56px thumbnail upload. Empty shows a small upload button;
|
|
570
|
+
once an image is chosen the button hides and a thumbnail + corner × takes its
|
|
571
|
+
place. The frame clips the image (overflow hidden) while the thumb wrapper
|
|
572
|
+
stays visible, so the × can sit just outside the corner without being cut. */
|
|
573
|
+
.hcms-shell .mirk-image--compact { flex-direction: row; align-items: center; gap: 0; }
|
|
574
|
+
.hcms-shell .mirk-image__thumb { position: relative; display: inline-block; width: fit-content; margin: 0; line-height: 0; }
|
|
575
|
+
.hcms-shell .mirk-image--compact .mirk-image__frame {
|
|
576
|
+
width: 56px; height: 56px; overflow: hidden; border-radius: 0;
|
|
577
|
+
border: 1px solid var(--mirk-input-border);
|
|
578
|
+
}
|
|
579
|
+
.hcms-shell .mirk-image--compact.mirk-image--rounded .mirk-image__frame { border-radius: var(--mirk-radius); }
|
|
580
|
+
.hcms-shell .mirk-image--compact .mirk-image__preview {
|
|
581
|
+
position: static; inset: auto; width: 100%; height: 100%; display: block; object-fit: cover;
|
|
582
|
+
}
|
|
583
|
+
.hcms-shell .mirk-image__remove {
|
|
584
|
+
position: absolute; top: -7px; right: -7px;
|
|
585
|
+
width: 18px; height: 18px; border-radius: 50%; padding: 0;
|
|
586
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
587
|
+
appearance: none; -webkit-appearance: none; cursor: pointer; line-height: 0;
|
|
588
|
+
color: var(--mirk-bevel-fg); background: var(--mirk-bevel-bg);
|
|
589
|
+
border: 1px solid var(--mirk-input-border);
|
|
590
|
+
}
|
|
591
|
+
.hcms-shell .mirk-image__remove svg { display: block; width: 10px; height: 10px; }
|
|
592
|
+
.hcms-shell .mirk-image__remove:hover { color: var(--mirk-destructive); border-color: var(--mirk-destructive); }
|
|
593
|
+
|
|
594
|
+
/* ============================ TAGS ============================ */
|
|
595
|
+
.hcms-shell .mirk-tags {
|
|
596
|
+
display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; padding: 0.5rem;
|
|
597
|
+
background: var(--mirk-bevel-bg); border: 1px solid var(--mirk-input-border);
|
|
598
|
+
border-radius: 0; cursor: text;
|
|
599
|
+
}
|
|
600
|
+
.hcms-shell .mirk-tags:has(:focus-visible) {
|
|
601
|
+
outline: 1px solid var(--mirk-focus-color); outline-offset: var(--mirk-focus-offset);
|
|
602
|
+
}
|
|
603
|
+
.hcms-shell .mirk-tags__chip {
|
|
604
|
+
display: inline-flex; align-items: center; gap: 0.5rem;
|
|
605
|
+
padding: 2px 8px 2px 12px; font-size: 14px; line-height: 1.5;
|
|
606
|
+
color: var(--mirk-bevel-fg); background: var(--mirk-bevel-bg);
|
|
607
|
+
border: 2px solid;
|
|
608
|
+
border-color: var(--mirk-bevel-tl) var(--mirk-bevel-br) var(--mirk-bevel-br) var(--mirk-bevel-tl);
|
|
609
|
+
}
|
|
610
|
+
.hcms-shell .mirk-tags__remove {
|
|
611
|
+
appearance: none; -webkit-appearance: none;
|
|
612
|
+
margin: 0; padding: 0; border: 0; background: none; color: inherit;
|
|
613
|
+
cursor: pointer; font-size: 14px; line-height: 1;
|
|
614
|
+
}
|
|
615
|
+
.hcms-shell .mirk-tags__remove:hover { color: var(--mirk-destructive); }
|
|
616
|
+
.hcms-shell .mirk-tags__input {
|
|
617
|
+
appearance: none; -webkit-appearance: none;
|
|
618
|
+
border: 0; padding: 0;
|
|
619
|
+
flex: 1; min-width: 120px; background: transparent; color: var(--mirk-bevel-fg);
|
|
620
|
+
outline: none; font-size: 18px; line-height: 1.5;
|
|
621
|
+
}
|
|
622
|
+
.hcms-shell .mirk-tags__input::placeholder { color: var(--mirk-placeholder-color); }
|
|
623
|
+
|
|
624
|
+
.hcms-shell .mirk-tags--round { border-radius: 15px; }
|
|
625
|
+
.hcms-shell .mirk-tags--round .mirk-tags__chip {
|
|
626
|
+
padding: 2px; border: none; border-radius: 12px;
|
|
627
|
+
background-color: transparent;
|
|
628
|
+
background-image: linear-gradient(to top in oklab, var(--mirk-bevel-br), var(--mirk-bevel-tl));
|
|
629
|
+
}
|
|
630
|
+
.hcms-shell .mirk-tags__chip-inner {
|
|
631
|
+
display: inline-flex; align-items: center; gap: 0.5rem;
|
|
632
|
+
padding: 1px 8px 1px 12px; border-radius: 10px;
|
|
633
|
+
color: var(--mirk-bevel-fg); background-color: var(--mirk-bevel-bg);
|
|
634
|
+
background-image: linear-gradient(to top in oklab, var(--mirk-bevel-bg), var(--mirk-pill-inner-top));
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
.hcms-shell .mirk-tags--small { gap: 0.375rem; padding: 0.375rem; }
|
|
638
|
+
.hcms-shell .mirk-tags--small .mirk-tags__chip { padding: 1px 6px 1px 10px; font-size: 12px; }
|
|
639
|
+
.hcms-shell .mirk-tags--small .mirk-tags__remove { font-size: 12px; }
|
|
640
|
+
.hcms-shell .mirk-tags--small .mirk-tags__input { font-size: 14px; min-width: 90px; }
|
|
641
|
+
.hcms-shell .mirk-tags--small.mirk-tags--round { border-radius: 12px; }
|
|
642
|
+
.hcms-shell .mirk-tags--small.mirk-tags--round .mirk-tags__chip-inner { padding: 1px 6px 1px 10px; }
|
|
643
|
+
|
|
644
|
+
/* ============================ SORTABLE ============================ */
|
|
645
|
+
.hcms-shell .mirk-sortable { display: flex; flex-direction: column; gap: 0.5rem; }
|
|
646
|
+
.hcms-shell .mirk-sortable__item {
|
|
647
|
+
display: flex; flex-direction: row; width: 100%;
|
|
648
|
+
background: var(--mirk-bevel-bg); border: 1px solid var(--mirk-input-border);
|
|
649
|
+
}
|
|
650
|
+
.hcms-shell .mirk-sortable__grip {
|
|
651
|
+
width: 28px; flex-shrink: 0; display: flex; align-items: center; justify-content: center;
|
|
652
|
+
cursor: grab; border-right: 1px solid var(--mirk-input-border);
|
|
653
|
+
}
|
|
654
|
+
.hcms-shell .mirk-sortable__grip:active { cursor: grabbing; }
|
|
655
|
+
.hcms-shell .mirk-sortable__dots { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 3px; }
|
|
656
|
+
.hcms-shell .mirk-sortable__dot {
|
|
657
|
+
display: block; width: 4px; height: 4px; background: var(--mirk-sortable-dot);
|
|
658
|
+
box-shadow: 1px 0 0 0 var(--mirk-sortable-shadow), 0 1px 0 0 var(--mirk-sortable-shadow), 1px 1px 0 0 var(--mirk-sortable-shadow);
|
|
659
|
+
}
|
|
660
|
+
.hcms-shell .mirk-sortable__body { display: flex; flex-direction: column; flex: 1; min-width: 0; }
|
|
661
|
+
.hcms-shell .mirk-sortable__row { padding: 8px 17px 9px; }
|
|
662
|
+
.hcms-shell .mirk-sortable__row:not(:last-child) { border-bottom: 1px solid var(--mirk-input-border); }
|
|
663
|
+
.hcms-shell .mirk-sortable__label {
|
|
664
|
+
display: block; font-size: 11px; text-transform: uppercase; letter-spacing: 0.2em;
|
|
665
|
+
margin-bottom: 2px; color: var(--mirk-sortable-label);
|
|
666
|
+
}
|
|
667
|
+
.hcms-shell .mirk-sortable__field {
|
|
668
|
+
width: 100%; background: transparent; color: var(--mirk-bevel-fg);
|
|
669
|
+
font-size: 18px; line-height: 1.5; outline: none;
|
|
670
|
+
}
|
|
671
|
+
.hcms-shell .mirk-sortable__field::placeholder { color: var(--mirk-sortable-placeholder); }
|
|
672
|
+
.hcms-shell .mirk-sortable__field:focus-visible {
|
|
673
|
+
outline: 1px solid var(--mirk-focus-color); outline-offset: var(--mirk-focus-offset);
|
|
674
|
+
}
|
|
675
|
+
.hcms-shell .mirk-sortable--small { gap: 0.375rem; }
|
|
676
|
+
.hcms-shell .mirk-sortable--small .mirk-sortable__grip { width: 24px; }
|
|
677
|
+
.hcms-shell .mirk-sortable--small .mirk-sortable__row { padding: 5px 13px 6px; }
|
|
678
|
+
.hcms-shell .mirk-sortable--small .mirk-sortable__label { font-size: 10px; margin-bottom: 1px; }
|
|
679
|
+
.hcms-shell .mirk-sortable--small .mirk-sortable__field { font-size: 14px; }
|
|
680
|
+
|
|
681
|
+
/* ============================ CHIP ============================ */
|
|
682
|
+
/* A collapsible recovery/notification: a round pill that expands into a RAISED
|
|
683
|
+
panel — the kit's one elevated surface (a distinct --mirk-bg face, a hairline
|
|
684
|
+
outline, and a soft drop shadow, the only shadow in the kit, reserved for this
|
|
685
|
+
raised tier). State lives in classes (--open, is-changes) so it round-trips via
|
|
686
|
+
outerHTML; mirk.js only flips them on click. Color reads from generic kit
|
|
687
|
+
tokens through 5 slim --mirk-chip-* hooks, so it matches the kit and reskins by
|
|
688
|
+
overriding a hook, not a rule. In a Hyperclay app, add `save-remove` to the
|
|
689
|
+
block so a transient prompt never persists into the saved file. */
|
|
690
|
+
.hcms-shell .mirk-chip { display: inline-flex; flex-direction: column; align-items: flex-start; }
|
|
691
|
+
.hcms-shell .mirk-chip__panel { display: none; }
|
|
692
|
+
.hcms-shell .mirk-chip--open .mirk-chip__trigger { display: none; }
|
|
693
|
+
.hcms-shell .mirk-chip--open .mirk-chip__panel { display: flex; }
|
|
694
|
+
|
|
695
|
+
/* Collapsed chip — a round mirk-button pill (mirk-button--round in the markup),
|
|
696
|
+
the alert glyph seated in the label, so it reads as a distinct affordance, not
|
|
697
|
+
a flat button. A soft, tight lift sets it above the page; deeper on a dark
|
|
698
|
+
canvas (same media + forced-mode pattern as the panel shadow below). */
|
|
699
|
+
.hcms-shell .mirk-chip__trigger .mirk-button__label { display: inline-flex; align-items: center; gap: 6px; font-size: 14px; }
|
|
700
|
+
.hcms-shell .mirk-chip__trigger { box-shadow: 0 6px 14px -8px rgba(43, 36, 27, 0.5), 0 2px 5px -3px rgba(43, 36, 27, 0.32); }
|
|
701
|
+
@media (prefers-color-scheme: dark) { .hcms-shell .mirk-chip__trigger { box-shadow: 0 6px 14px -8px rgba(0, 0, 0, 0.6), 0 2px 6px -3px rgba(0, 0, 0, 0.5); } }
|
|
702
|
+
.hcms-shell.light .mirk-chip__trigger, .hcms-shell[data-theme="light"] .mirk-chip__trigger { box-shadow: 0 6px 14px -8px rgba(43, 36, 27, 0.5), 0 2px 5px -3px rgba(43, 36, 27, 0.32); }
|
|
703
|
+
.hcms-shell.dark .mirk-chip__trigger, .hcms-shell[data-theme="dark"] .mirk-chip__trigger { box-shadow: 0 6px 14px -8px rgba(0, 0, 0, 0.6), 0 2px 6px -3px rgba(0, 0, 0, 0.5); }
|
|
704
|
+
/* Drive the warning fill from CSS, not an SVG fill="var(...)" presentation
|
|
705
|
+
attribute (var() is not reliably honored there). */
|
|
706
|
+
.hcms-shell .mirk-chip__warn { fill: var(--mirk-chip-alert); }
|
|
707
|
+
.hcms-shell .mirk-chip__trigger .mirk-chip__warn { vertical-align: -2px; }
|
|
708
|
+
|
|
709
|
+
/* The panel — the raised surface: a --mirk-bg face over the page, a hairline
|
|
710
|
+
outline, a soft drop shadow. */
|
|
711
|
+
.hcms-shell .mirk-chip__panel {
|
|
712
|
+
width: 300px; max-width: calc(100vw - 44px);
|
|
713
|
+
background: var(--mirk-chip-surface); color: var(--mirk-fg);
|
|
714
|
+
border: 1px solid var(--mirk-chip-edge); border-radius: var(--mirk-radius);
|
|
715
|
+
box-shadow: 0 20px 50px -30px rgba(43, 36, 27, 0.6);
|
|
716
|
+
padding: 14px 15px 13px; flex-direction: column; gap: 12px;
|
|
717
|
+
}
|
|
718
|
+
/* The panel's larger drop (the collapsed pill above carries a tighter one); deepen
|
|
719
|
+
both on a dark canvas. Mirrors the --focus-offset pattern: a media default for
|
|
720
|
+
the OS, plus explicit forced-mode overrides. */
|
|
721
|
+
@media (prefers-color-scheme: dark) { .hcms-shell .mirk-chip__panel { box-shadow: 0 20px 52px -26px rgba(0, 0, 0, 0.78); } }
|
|
722
|
+
.hcms-shell.light .mirk-chip__panel, .hcms-shell[data-theme="light"] .mirk-chip__panel { box-shadow: 0 20px 50px -30px rgba(43, 36, 27, 0.6); }
|
|
723
|
+
.hcms-shell.dark .mirk-chip__panel, .hcms-shell[data-theme="dark"] .mirk-chip__panel { box-shadow: 0 20px 52px -26px rgba(0, 0, 0, 0.78); }
|
|
724
|
+
|
|
725
|
+
/* Head — icon, text, collapse glyph. */
|
|
726
|
+
.hcms-shell .mirk-chip__head { display: flex; gap: 10px; align-items: flex-start; }
|
|
727
|
+
.hcms-shell .mirk-chip__icon { flex-shrink: 0; line-height: 0; margin-top: 1px; }
|
|
728
|
+
.hcms-shell .mirk-chip__headtext { min-width: 0; }
|
|
729
|
+
.hcms-shell .mirk-chip__eyebrow {
|
|
730
|
+
font-size: 9.5px; text-transform: uppercase; letter-spacing: 0.2em;
|
|
731
|
+
color: var(--mirk-placeholder-color); margin-bottom: 3px;
|
|
732
|
+
}
|
|
733
|
+
.hcms-shell .mirk-chip__title { margin: 0; font-size: 13px; font-weight: 400; line-height: 1.3; color: var(--mirk-fg); }
|
|
734
|
+
.hcms-shell .mirk-chip__collapse {
|
|
735
|
+
margin-left: auto; flex-shrink: 0; width: 24px; height: 24px;
|
|
736
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
737
|
+
background: none; border: 0; cursor: pointer; padding: 0;
|
|
738
|
+
color: var(--mirk-placeholder-color);
|
|
739
|
+
}
|
|
740
|
+
.hcms-shell .mirk-chip__collapse:hover { color: var(--mirk-fg); }
|
|
741
|
+
.hcms-shell .mirk-chip__collapse svg { display: block; }
|
|
742
|
+
|
|
743
|
+
/* Meta line. */
|
|
744
|
+
.hcms-shell .mirk-chip__meta { font-size: 11px; letter-spacing: 0.04em; color: var(--mirk-placeholder-color); }
|
|
745
|
+
.hcms-shell .mirk-chip__changes-toggle {
|
|
746
|
+
background: none; border: 0; cursor: pointer; font: inherit; font-size: 11px; padding: 0 0 0 4px;
|
|
747
|
+
color: var(--mirk-placeholder-color); text-decoration: underline; text-underline-offset: 2px;
|
|
748
|
+
}
|
|
749
|
+
.hcms-shell .mirk-chip__changes-toggle:hover { color: var(--mirk-fg); }
|
|
750
|
+
|
|
751
|
+
/* Before/after field table — a recessed stack, revealed by the changes toggle. */
|
|
752
|
+
.hcms-shell .mirk-chip__preview {
|
|
753
|
+
display: none; flex-direction: column; gap: 11px;
|
|
754
|
+
background: var(--mirk-bevel-bg); border: 1px solid var(--mirk-chip-edge);
|
|
755
|
+
padding: 10px 11px;
|
|
756
|
+
}
|
|
757
|
+
.hcms-shell .mirk-chip__panel.is-changes .mirk-chip__preview { display: flex; }
|
|
758
|
+
.hcms-shell .mirk-chip__row { display: flex; flex-direction: column; gap: 2px; }
|
|
759
|
+
.hcms-shell .mirk-chip__key {
|
|
760
|
+
font-size: 9.5px; text-transform: uppercase; letter-spacing: 0.1em;
|
|
761
|
+
color: var(--mirk-placeholder-color);
|
|
762
|
+
}
|
|
763
|
+
.hcms-shell .mirk-chip__old, .hcms-shell .mirk-chip__new { max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
764
|
+
.hcms-shell .mirk-chip__old { font-size: 11px; color: var(--mirk-chip-alert); text-decoration: line-through; opacity: 0.85; }
|
|
765
|
+
.hcms-shell .mirk-chip__new { font-size: 12px; color: var(--mirk-fg); }
|
|
766
|
+
|
|
767
|
+
/* Action stack — full-width buttons by weight: an embossed primary, a plain bevel
|
|
768
|
+
revert, a quiet (--quiet) dismiss. */
|
|
769
|
+
.hcms-shell .mirk-chip__actions { display: flex; flex-direction: column; gap: 8px; margin-top: 1px; }
|
|
770
|
+
.hcms-shell .mirk-chip__actions .mirk-button { width: 100%; }
|
|
771
|
+
/* Primary action — a genuine kit bevel button whose bevel palette is derived from
|
|
772
|
+
the chip's primary fill (lighter top-left, darker bottom-right), so it embosses
|
|
773
|
+
on any color. The base .mirk-button rules then drive its border, hover, and the
|
|
774
|
+
:active flip, identical to the kit's other buttons. */
|
|
775
|
+
.hcms-shell .mirk-chip__actions .mirk-chip__action--primary {
|
|
776
|
+
--mirk-bevel-bg: var(--mirk-chip-primary-bg);
|
|
777
|
+
--mirk-bevel-fg: var(--mirk-chip-primary-fg);
|
|
778
|
+
--mirk-bevel-tl: color-mix(in srgb, var(--mirk-chip-primary-bg), white 24%);
|
|
779
|
+
--mirk-bevel-br: color-mix(in srgb, var(--mirk-chip-primary-bg), black 32%);
|
|
780
|
+
--mirk-bevel-hover-bg: color-mix(in srgb, var(--mirk-chip-primary-bg), white 10%);
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
/* ============================ FIELD ============================ */
|
|
784
|
+
/* Label + control + hint as one unit, so a form composes without utilities
|
|
785
|
+
(and without needing the mirk-page rhythm). Any control drops in; the gap
|
|
786
|
+
matches the page scaffold's label/hint hug. Consecutive fields space
|
|
787
|
+
themselves. */
|
|
788
|
+
.hcms-shell .mirk-field { display: flex; flex-direction: column; gap: 6px; }
|
|
789
|
+
.hcms-shell .mirk-field__label { font-size: 16px; line-height: 1.5; }
|
|
790
|
+
.hcms-shell .mirk-field + .mirk-field { margin-block-start: 18px; }
|
|
791
|
+
.hcms-shell .mirk-field--small .mirk-field__label { font-size: 14px; }
|
|
792
|
+
|
|
793
|
+
/* An alert hint inside a field stays hidden until a control in the field
|
|
794
|
+
goes :user-invalid — a zero-JS native-validation message. Show one
|
|
795
|
+
unconditionally (a server-side error) by placing it outside the field or
|
|
796
|
+
overriding display. */
|
|
797
|
+
.hcms-shell .mirk-field .mirk-hint--alert { display: none; }
|
|
798
|
+
.hcms-shell .mirk-field:has(:user-invalid) .mirk-hint--alert { display: block; }
|
|
799
|
+
|
|
800
|
+
/* ============================ INVALID ============================ */
|
|
801
|
+
/* Native constraint validation, styled. :user-invalid fires only after the
|
|
802
|
+
user interacts (unlike :invalid, which would paint required fields red on
|
|
803
|
+
load). A flat destructive border is the 0012 stateful read; the focus ring
|
|
804
|
+
stays the focus signal. Pair the message with mirk-hint--alert. */
|
|
805
|
+
.hcms-shell .mirk-input:user-invalid, .hcms-shell .mirk-textarea:user-invalid, .hcms-shell .mirk-date__field:user-invalid, .hcms-shell .mirk-select__field:user-invalid, .hcms-shell .mirk-number:has(.mirk-number__input:user-invalid) {
|
|
806
|
+
border-color: var(--mirk-destructive);
|
|
807
|
+
}
|
|
808
|
+
.hcms-shell .mirk-checkbox:has(:user-invalid) .mirk-checkbox__box, .hcms-shell .mirk-toggle:has(:user-invalid) .mirk-toggle__track {
|
|
809
|
+
border-color: var(--mirk-destructive);
|
|
810
|
+
}
|
|
811
|
+
/* The unchecked ring is a borderless gradient pill; invalid swaps it for a
|
|
812
|
+
flat destructive ring (the fill pill still seats inside). */
|
|
813
|
+
.hcms-shell .mirk-radio:has(:user-invalid) .mirk-radio__ring {
|
|
814
|
+
background-image: none;
|
|
815
|
+
border: 2px solid var(--mirk-destructive);
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
/* ============================ PROGRESS ============================ */
|
|
819
|
+
/* A native <progress> in the slider's clothes: the canvas channel, the
|
|
820
|
+
slider-fill value bar. --blocks segments the fill into pixel blocks.
|
|
821
|
+
Keep the -webkit and -moz rules separate — an unrecognized pseudo-element
|
|
822
|
+
invalidates the whole selector list. */
|
|
823
|
+
.hcms-shell .mirk-progress {
|
|
824
|
+
appearance: none; -webkit-appearance: none;
|
|
825
|
+
display: block; width: 100%; height: 12px;
|
|
826
|
+
border: 1px solid var(--mirk-input-border);
|
|
827
|
+
background: var(--mirk-canvas);
|
|
828
|
+
}
|
|
829
|
+
.hcms-shell .mirk-progress::-webkit-progress-bar { background: transparent; }
|
|
830
|
+
.hcms-shell .mirk-progress::-webkit-progress-value { background: var(--mirk-slider-fill); }
|
|
831
|
+
.hcms-shell .mirk-progress::-moz-progress-bar { background: var(--mirk-slider-fill); }
|
|
832
|
+
.hcms-shell .mirk-progress--small { height: 8px; }
|
|
833
|
+
.hcms-shell .mirk-progress--round { border-radius: 9999px; overflow: hidden; }
|
|
834
|
+
.hcms-shell .mirk-progress--blocks::-webkit-progress-value {
|
|
835
|
+
background: repeating-linear-gradient(to right,
|
|
836
|
+
var(--mirk-slider-fill) 0 8px, transparent 8px 11px);
|
|
837
|
+
}
|
|
838
|
+
.hcms-shell .mirk-progress--blocks::-moz-progress-bar {
|
|
839
|
+
background: repeating-linear-gradient(to right,
|
|
840
|
+
var(--mirk-slider-fill) 0 8px, transparent 8px 11px);
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
/* ============================ NOTE ============================ */
|
|
844
|
+
/* An informational callout. Flat on purpose: bevel means pressable in this
|
|
845
|
+
kit (0012) and a note is content, so it gets the 1px content border over
|
|
846
|
+
the recessed face, never the raised edge. The 4px left edge carries the
|
|
847
|
+
status: neutral ink by default, destructive on --alert. */
|
|
848
|
+
.hcms-shell .mirk-note {
|
|
849
|
+
display: flex; flex-direction: column; gap: 4px;
|
|
850
|
+
background: var(--mirk-bevel-bg);
|
|
851
|
+
border: 1px solid var(--mirk-input-border);
|
|
852
|
+
border-left: 4px solid var(--mirk-mark-fg);
|
|
853
|
+
padding: 10px 14px 11px;
|
|
854
|
+
font-size: 14px; line-height: 1.5;
|
|
855
|
+
}
|
|
856
|
+
.hcms-shell .mirk-note__title {
|
|
857
|
+
font-size: 11px; text-transform: uppercase; letter-spacing: 0.2em;
|
|
858
|
+
color: var(--mirk-mark-fg);
|
|
859
|
+
}
|
|
860
|
+
.hcms-shell .mirk-note__body { color: var(--mirk-fg); }
|
|
861
|
+
.hcms-shell .mirk-note--alert { border-left-color: var(--mirk-destructive); }
|
|
862
|
+
.hcms-shell .mirk-note--alert .mirk-note__title { color: var(--mirk-destructive); }
|
|
863
|
+
.hcms-shell .mirk-note--rounded { border-radius: var(--mirk-radius); }
|
|
864
|
+
|
|
865
|
+
/* ============================ HINT ============================ */
|
|
866
|
+
/* Small print under a field: neutral help text, or --alert validation text. */
|
|
867
|
+
.hcms-shell .mirk-hint { margin: 0; font-size: 13px; line-height: 1.5; color: var(--mirk-placeholder-color); }
|
|
868
|
+
.hcms-shell .mirk-hint--alert { color: var(--mirk-destructive); }
|
|
869
|
+
|
|
870
|
+
/* ============================ LIST ============================ */
|
|
871
|
+
/* Content bullets. <ul> gets a square pixel dot (the sortable dot's idiom,
|
|
872
|
+
one step larger); a nested <ul> hollows it. <ol> gets zero-padded counters
|
|
873
|
+
in the muted label ink. Styles the bare <li> by descent, like the platform. */
|
|
874
|
+
.hcms-shell .mirk-list {
|
|
875
|
+
list-style: none; margin: 0; padding: 0;
|
|
876
|
+
display: flex; flex-direction: column; gap: 6px;
|
|
877
|
+
font-size: 16px; line-height: 1.5;
|
|
878
|
+
}
|
|
879
|
+
.hcms-shell .mirk-list li { position: relative; padding-left: 22px; }
|
|
880
|
+
.hcms-shell ul.mirk-list > li::before {
|
|
881
|
+
content: ""; position: absolute; left: 2px; top: 0.55em;
|
|
882
|
+
width: 6px; height: 6px; background: var(--mirk-mark-fg);
|
|
883
|
+
box-shadow: 1px 1px 0 0 var(--mirk-sortable-shadow);
|
|
884
|
+
}
|
|
885
|
+
.hcms-shell ol.mirk-list { counter-reset: mirk-li; }
|
|
886
|
+
.hcms-shell ol.mirk-list > li { counter-increment: mirk-li; padding-left: 38px; }
|
|
887
|
+
.hcms-shell ol.mirk-list > li::before {
|
|
888
|
+
content: counter(mirk-li, decimal-leading-zero) ".";
|
|
889
|
+
position: absolute; left: 0; top: 0;
|
|
890
|
+
color: var(--mirk-sortable-label);
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
/* One nested level: hollow square, same stack. */
|
|
894
|
+
.hcms-shell .mirk-list ul {
|
|
895
|
+
list-style: none; margin: 6px 0 0; padding: 0;
|
|
896
|
+
display: flex; flex-direction: column; gap: 6px;
|
|
897
|
+
}
|
|
898
|
+
.hcms-shell .mirk-list ul > li::before {
|
|
899
|
+
content: ""; position: absolute; left: 2px; top: 0.55em;
|
|
900
|
+
width: 6px; height: 6px; background: transparent;
|
|
901
|
+
border: 1.5px solid var(--mirk-mark-fg); box-shadow: none;
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
.hcms-shell .mirk-list--small { font-size: 14px; gap: 4px; }
|
|
905
|
+
.hcms-shell .mirk-list--small li { padding-left: 18px; }
|
|
906
|
+
.hcms-shell ul.mirk-list--small > li::before, .hcms-shell .mirk-list--small ul > li::before { width: 5px; height: 5px; }
|
|
907
|
+
.hcms-shell ol.mirk-list--small > li { padding-left: 32px; }
|
|
908
|
+
|
|
909
|
+
/* ============================ BADGE ============================ */
|
|
910
|
+
/* A static tag label — the display counterpart to the mirk-tags input. Flat
|
|
911
|
+
on purpose: bevel means pressable (0012), a badge is content. */
|
|
912
|
+
.hcms-shell .mirk-badge {
|
|
913
|
+
display: inline-flex; align-items: center; gap: 0.375rem;
|
|
914
|
+
padding: 1px 8px 2px; font-size: 12px; line-height: 1.5;
|
|
915
|
+
color: var(--mirk-fg); background: var(--mirk-bevel-bg);
|
|
916
|
+
border: 1px solid var(--mirk-input-border);
|
|
917
|
+
white-space: nowrap; vertical-align: middle;
|
|
918
|
+
}
|
|
919
|
+
.hcms-shell .mirk-badge--accent { background: var(--mirk-accent); }
|
|
920
|
+
.hcms-shell .mirk-badge--round { border-radius: 9999px; padding: 1px 10px 2px; }
|
|
921
|
+
.hcms-shell .mirk-badge--alert { color: var(--mirk-destructive); border-color: var(--mirk-destructive); }
|
|
922
|
+
|
|
923
|
+
/* ============================ TABLE ============================ */
|
|
924
|
+
/* A flat data surface: the content face in a 1px frame, header cells in the
|
|
925
|
+
eyebrow register, hairline row dividers. Semantic <table> styled by
|
|
926
|
+
descent — no per-cell classes. The header/stripe tints ride color-mix
|
|
927
|
+
toward the ink so they stay visible in every palette (Pixel Quiet's
|
|
928
|
+
canvas and face are nearly the same value). Wrap in an overflow-x:auto
|
|
929
|
+
div when the table can outgrow its column. */
|
|
930
|
+
.hcms-shell .mirk-table {
|
|
931
|
+
width: 100%; border-collapse: collapse;
|
|
932
|
+
background: var(--mirk-bevel-bg);
|
|
933
|
+
border: 1px solid var(--mirk-input-border);
|
|
934
|
+
font-size: 14px; line-height: 1.5;
|
|
935
|
+
}
|
|
936
|
+
.hcms-shell .mirk-table th {
|
|
937
|
+
text-align: left; font-weight: 400;
|
|
938
|
+
font-size: 11px; text-transform: uppercase; letter-spacing: 0.15em;
|
|
939
|
+
color: var(--mirk-placeholder-color);
|
|
940
|
+
background: color-mix(in srgb, var(--mirk-bevel-bg), var(--mirk-fg) 4%);
|
|
941
|
+
padding: 7px 14px;
|
|
942
|
+
border-bottom: 1px solid var(--mirk-input-border);
|
|
943
|
+
}
|
|
944
|
+
.hcms-shell .mirk-table td {
|
|
945
|
+
padding: 8px 14px;
|
|
946
|
+
border-bottom: 1px solid var(--mirk-input-border);
|
|
947
|
+
vertical-align: top;
|
|
948
|
+
}
|
|
949
|
+
.hcms-shell .mirk-table tbody tr:last-child td { border-bottom: 0; }
|
|
950
|
+
.hcms-shell .mirk-table--striped tbody tr:nth-child(even) td {
|
|
951
|
+
background: color-mix(in srgb, var(--mirk-bevel-bg), var(--mirk-fg) 3%);
|
|
952
|
+
}
|
|
953
|
+
.hcms-shell .mirk-table--small { font-size: 13px; }
|
|
954
|
+
.hcms-shell .mirk-table--small th { padding: 5px 12px; font-size: 10px; }
|
|
955
|
+
.hcms-shell .mirk-table--small td { padding: 5px 12px; }
|
|
956
|
+
|
|
957
|
+
/* ============================ PAGE ============================ */
|
|
958
|
+
/* The quickstart shell: mirk-page on <body> (or any wrapper) gives a centered
|
|
959
|
+
column + typographic defaults, so two CDN tags and one class boot a full
|
|
960
|
+
page. Every rule rides :where() (zero specificity): any utility, component
|
|
961
|
+
class, or consumer rule beats it. Flow rhythm targets direct children only,
|
|
962
|
+
so margins never leak inside component internals. */
|
|
963
|
+
.hcms-shell .mirk-page { max-width: 640px; margin-inline: auto; padding: 48px 24px 96px; }
|
|
964
|
+
.hcms-shell .mirk-page--wide { max-width: 960px; }
|
|
965
|
+
|
|
966
|
+
/* Departure Mono ships one weight — hierarchy comes from size, never bold. */
|
|
967
|
+
.hcms-shell .mirk-page :where(h1, h2, h3, h4) { margin: 0; font-weight: 400; line-height: 1.15; }
|
|
968
|
+
.hcms-shell .mirk-page :where(h1) { font-size: 40px; }
|
|
969
|
+
.hcms-shell .mirk-page :where(h2) { font-size: 26px; }
|
|
970
|
+
.hcms-shell .mirk-page :where(h3) { font-size: 20px; }
|
|
971
|
+
.hcms-shell .mirk-page :where(h4) { font-size: 16px; }
|
|
972
|
+
.hcms-shell .mirk-page :where(p) { margin: 0; font-size: 16px; line-height: 1.6; }
|
|
973
|
+
|
|
974
|
+
.hcms-shell .mirk-page :where(a) { color: inherit; text-decoration: underline; text-underline-offset: 2px; }
|
|
975
|
+
.hcms-shell .mirk-page :where(code, kbd) {
|
|
976
|
+
font-size: 0.875em; padding: 1px 4px;
|
|
977
|
+
background: var(--mirk-bevel-bg); border: 1px solid var(--mirk-input-border);
|
|
978
|
+
}
|
|
979
|
+
.hcms-shell .mirk-page :where(pre) {
|
|
980
|
+
margin: 0; padding: 12px 14px; font-size: 13px; line-height: 1.5; overflow-x: auto;
|
|
981
|
+
background: var(--mirk-bevel-bg); border: 1px solid var(--mirk-input-border);
|
|
982
|
+
}
|
|
983
|
+
.hcms-shell .mirk-page :where(pre code) { padding: 0; border: 0; background: none; font-size: inherit; }
|
|
984
|
+
.hcms-shell .mirk-page :where(hr) { border: 0; border-top: 1px solid var(--mirk-input-border); }
|
|
985
|
+
|
|
986
|
+
/* Flow rhythm — direct children only; headings open sections, eyebrows and
|
|
987
|
+
hints hug their neighbors. Equal specificity, so source order settles ties. */
|
|
988
|
+
.hcms-shell .mirk-page > :where(* + *) { margin-block-start: 14px; }
|
|
989
|
+
.hcms-shell .mirk-page > :where(h1, h2, h3, h4):where(* + *) { margin-block-start: 40px; }
|
|
990
|
+
.hcms-shell .mirk-page > :where(.mirk-eyebrow + *), .hcms-shell .mirk-page > :where(* + .mirk-hint) { margin-block-start: 6px; }
|
|
991
|
+
|
|
992
|
+
/* ============================ EYEBROW ============================ */
|
|
993
|
+
/* The kit's signature section label, as a shippable class. Block so it works
|
|
994
|
+
the same on <p>, <label>, or <div>, and flow margins always apply. */
|
|
995
|
+
.hcms-shell .mirk-eyebrow {
|
|
996
|
+
display: block; margin: 0;
|
|
997
|
+
font-size: 11px; text-transform: uppercase; letter-spacing: 0.2em;
|
|
998
|
+
color: var(--mirk-placeholder-color);
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
/* Respect the machine — outside @layer components so it always wins. */
|
|
1003
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1004
|
+
.hcms-shell .mirk-button--round, .hcms-shell .mirk-toggle__thumb { transition: none; }
|
|
1005
|
+
.hcms-shell .mirk-button:active .mirk-button__label { translate: none; }
|
|
1006
|
+
}
|
|
1007
|
+
@media (forced-colors: active) {
|
|
1008
|
+
.hcms-shell .mirk-button, .hcms-shell .mirk-select__field, .hcms-shell .mirk-checkbox__box, .hcms-shell .mirk-toggle__track { border: 1px solid ButtonText; }
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
/* ===== pixel-quiet overrides (hypercms-owned) ===== */
|
|
1012
|
+
/* =====================================================================
|
|
1013
|
+
Pixel Quiet — hypercms theme overrides (hypercms-owned).
|
|
1014
|
+
|
|
1015
|
+
Adapted from cms-sidebar/pixel-quiet/overrides.css. Two jobs:
|
|
1016
|
+
1. Retune --mirk-* tokens, scoped to .hcms-shell.pixel-quiet (never :root).
|
|
1017
|
+
2. Author the panel geometry + the functional chrome the static mockup
|
|
1018
|
+
doesn't have (error banner, add/remove/move controls, the engine's
|
|
1019
|
+
sortable cards, push / overlay / left-dock modes) on top of the
|
|
1020
|
+
.hcms-* structural hooks.
|
|
1021
|
+
|
|
1022
|
+
This file is concatenated AFTER the scoped mirk base+components by
|
|
1023
|
+
scripts/build-theme.js, so plain rules here win over mirk's @layer
|
|
1024
|
+
components with zero !important. Loaded only inside .hcms-shell, so nothing
|
|
1025
|
+
here leaks onto the host page.
|
|
1026
|
+
===================================================================== */
|
|
1027
|
+
|
|
1028
|
+
/* ============================================================
|
|
1029
|
+
TOKEN RETUNE — LIGHT (warm cream, gentle near-equal bevel)
|
|
1030
|
+
============================================================ */
|
|
1031
|
+
.hcms-shell.pixel-quiet {
|
|
1032
|
+
color-scheme: light;
|
|
1033
|
+
--mirk-canvas: #F7F2EA;
|
|
1034
|
+
--mirk-bg: #F7F2EA;
|
|
1035
|
+
--mirk-fg: #2B241B;
|
|
1036
|
+
--mirk-accent: #efefe5;
|
|
1037
|
+
--mirk-destructive: #C24A3A;
|
|
1038
|
+
--mirk-focus-color: #C7AE93;
|
|
1039
|
+
|
|
1040
|
+
--mirk-bevel-bg: #FCF8F1;
|
|
1041
|
+
--mirk-bevel-fg: #2B241B;
|
|
1042
|
+
--mirk-bevel-tl: #F0E7D8;
|
|
1043
|
+
--mirk-bevel-br: #E2D4BF;
|
|
1044
|
+
--mirk-bevel-hover-bg: #F4ECDF;
|
|
1045
|
+
--mirk-pill-inner-top: #FBF6EE;
|
|
1046
|
+
--mirk-input-border: #D8C8AF;
|
|
1047
|
+
--mirk-placeholder-color: #A8987F;
|
|
1048
|
+
|
|
1049
|
+
--mirk-mark-fg: #6B5942;
|
|
1050
|
+
--mirk-toggle-bg: #EFDBBD;
|
|
1051
|
+
--mirk-toggle-hi: #F4EADA;
|
|
1052
|
+
--mirk-toggle-lo: #C2A87E;
|
|
1053
|
+
--mirk-sortable-dot: #DDCBB0;
|
|
1054
|
+
--mirk-sortable-shadow: #C9B493;
|
|
1055
|
+
--mirk-sortable-label: #8C7B62;
|
|
1056
|
+
--mirk-sortable-placeholder: #A8987F;
|
|
1057
|
+
|
|
1058
|
+
--mirk-radius: 5px;
|
|
1059
|
+
--mirk-focus-offset: 2px;
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1062
|
+
/* dark token deltas, shared by the explicit .dark opt-in and OS preference */
|
|
1063
|
+
.hcms-shell.pixel-quiet.dark,
|
|
1064
|
+
.hcms-shell.pixel-quiet[data-theme="dark"] {
|
|
1065
|
+
color-scheme: dark;
|
|
1066
|
+
--mirk-canvas: #0B0C13;
|
|
1067
|
+
--mirk-bg: #11131E;
|
|
1068
|
+
--mirk-fg: #ECEAF2;
|
|
1069
|
+
--mirk-accent: #1D1F2F;
|
|
1070
|
+
--mirk-focus-color: #4A506B;
|
|
1071
|
+
|
|
1072
|
+
--mirk-bevel-bg: #1A1D2C;
|
|
1073
|
+
--mirk-bevel-fg: #ECEAF2;
|
|
1074
|
+
--mirk-bevel-tl: #2A2E42;
|
|
1075
|
+
--mirk-bevel-br: #14182A;
|
|
1076
|
+
--mirk-bevel-hover-bg: #202436;
|
|
1077
|
+
--mirk-pill-inner-top: #202436;
|
|
1078
|
+
--mirk-input-border: #353B52;
|
|
1079
|
+
--mirk-placeholder-color: #6A7090;
|
|
1080
|
+
|
|
1081
|
+
--mirk-mark-fg: #C9CDE0;
|
|
1082
|
+
--mirk-toggle-bg: #3E4660;
|
|
1083
|
+
--mirk-toggle-hi: #4E567A;
|
|
1084
|
+
--mirk-toggle-lo: #262B42;
|
|
1085
|
+
--mirk-sortable-dot: #353B52;
|
|
1086
|
+
--mirk-sortable-shadow: #0E1120;
|
|
1087
|
+
--mirk-sortable-label: #8A90AB;
|
|
1088
|
+
--mirk-sortable-placeholder: #6A7090;
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1091
|
+
/* Auto-dark on OS preference, unless the shell pins light with .light */
|
|
1092
|
+
@media (prefers-color-scheme: dark) {
|
|
1093
|
+
.hcms-shell.pixel-quiet:not(.light):not([data-theme="light"]) {
|
|
1094
|
+
color-scheme: dark;
|
|
1095
|
+
--mirk-canvas: #0B0C13;
|
|
1096
|
+
--mirk-bg: #11131E;
|
|
1097
|
+
--mirk-fg: #ECEAF2;
|
|
1098
|
+
--mirk-accent: #1D1F2F;
|
|
1099
|
+
--mirk-focus-color: #4A506B;
|
|
1100
|
+
|
|
1101
|
+
--mirk-bevel-bg: #1A1D2C;
|
|
1102
|
+
--mirk-bevel-fg: #ECEAF2;
|
|
1103
|
+
--mirk-bevel-tl: #2A2E42;
|
|
1104
|
+
--mirk-bevel-br: #14182A;
|
|
1105
|
+
--mirk-bevel-hover-bg: #202436;
|
|
1106
|
+
--mirk-pill-inner-top: #202436;
|
|
1107
|
+
--mirk-input-border: #353B52;
|
|
1108
|
+
--mirk-placeholder-color: #6A7090;
|
|
1109
|
+
|
|
1110
|
+
--mirk-mark-fg: #C9CDE0;
|
|
1111
|
+
--mirk-toggle-bg: #3E4660;
|
|
1112
|
+
--mirk-toggle-hi: #4E567A;
|
|
1113
|
+
--mirk-toggle-lo: #262B42;
|
|
1114
|
+
--mirk-sortable-dot: #353B52;
|
|
1115
|
+
--mirk-sortable-shadow: #0E1120;
|
|
1116
|
+
--mirk-sortable-label: #8A90AB;
|
|
1117
|
+
--mirk-sortable-placeholder: #6A7090;
|
|
1118
|
+
}
|
|
1119
|
+
}
|
|
1120
|
+
|
|
1121
|
+
/* ============================================================
|
|
1122
|
+
SHELL GEOMETRY — fixed, docked panel, single column.
|
|
1123
|
+
position: fixed makes the shell a containing block so the absolute
|
|
1124
|
+
minibar anchors to it; flex column so the body owns the scroll.
|
|
1125
|
+
============================================================ */
|
|
1126
|
+
.hcms-shell.pixel-quiet.hcms-panel {
|
|
1127
|
+
box-sizing: border-box;
|
|
1128
|
+
position: fixed;
|
|
1129
|
+
top: 0;
|
|
1130
|
+
right: 0;
|
|
1131
|
+
bottom: 0;
|
|
1132
|
+
width: var(--hcms-shell-width, 380px);
|
|
1133
|
+
max-width: 100vw;
|
|
1134
|
+
z-index: 2147483000;
|
|
1135
|
+
display: flex;
|
|
1136
|
+
flex-direction: column;
|
|
1137
|
+
color: var(--mirk-fg);
|
|
1138
|
+
background: var(--mirk-bg);
|
|
1139
|
+
border-left: 1px solid var(--mirk-input-border);
|
|
1140
|
+
box-shadow: -16px 0 48px -28px rgba(43, 36, 27, 0.45);
|
|
1141
|
+
}
|
|
1142
|
+
.hcms-shell.pixel-quiet.hcms-panel.dark {
|
|
1143
|
+
box-shadow: -16px 0 48px -28px rgba(0, 0, 0, 0.6);
|
|
1144
|
+
}
|
|
1145
|
+
|
|
1146
|
+
.hcms-shell.pixel-quiet.hcms-side-left {
|
|
1147
|
+
right: auto;
|
|
1148
|
+
left: 0;
|
|
1149
|
+
border-left: 0;
|
|
1150
|
+
border-right: 1px solid var(--mirk-input-border);
|
|
1151
|
+
box-shadow: 16px 0 48px -28px rgba(43, 36, 27, 0.45);
|
|
1152
|
+
}
|
|
1153
|
+
|
|
1154
|
+
/* Push the page over so docked content is never hidden underneath, and publish
|
|
1155
|
+
the geometry the floating toggle has to compose with. --hcms-toggle-shift is
|
|
1156
|
+
the distance the toggle moves left, which is the shell width only while the
|
|
1157
|
+
shell is docked on the right; docked left, as an overlay, or full-viewport it
|
|
1158
|
+
is zero. */
|
|
1159
|
+
body.hcms-open { --hcms-shell-width: 380px; }
|
|
1160
|
+
body.hcms-open:not(.hcms-overlay) { padding-right: var(--hcms-shell-width); }
|
|
1161
|
+
body.hcms-open:not(.hcms-overlay):not(.hcms-side-left) { --hcms-toggle-shift: var(--hcms-shell-width); }
|
|
1162
|
+
body.hcms-open.hcms-side-left:not(.hcms-overlay) { padding-right: 0; padding-left: var(--hcms-shell-width); }
|
|
1163
|
+
body.hcms-open.hcms-overlay { overflow: hidden; --hcms-toggle-display: none; }
|
|
1164
|
+
|
|
1165
|
+
@media (max-width: 799px) {
|
|
1166
|
+
body.hcms-open { --hcms-shell-width: 100vw; }
|
|
1167
|
+
body.hcms-open:not(.hcms-overlay):not(.hcms-side-left) { --hcms-toggle-shift: 0px; }
|
|
1168
|
+
body.hcms-open:not(.hcms-overlay),
|
|
1169
|
+
body.hcms-open.hcms-side-left:not(.hcms-overlay) { padding-right: 0; padding-left: 0; }
|
|
1170
|
+
body.hcms-open { overflow: hidden; }
|
|
1171
|
+
}
|
|
1172
|
+
|
|
1173
|
+
/* ---------- SCROLL REGION — holds the (scrollable) header + form + save ---------- */
|
|
1174
|
+
.hcms-shell-body {
|
|
1175
|
+
flex: 1;
|
|
1176
|
+
min-height: 0;
|
|
1177
|
+
overflow-y: auto;
|
|
1178
|
+
}
|
|
1179
|
+
|
|
1180
|
+
/* ---------- CONDENSED MINIBAR — appears once the full header scrolls away ---------- */
|
|
1181
|
+
.hcms-shell-minibar {
|
|
1182
|
+
position: absolute;
|
|
1183
|
+
top: 0;
|
|
1184
|
+
left: 0;
|
|
1185
|
+
right: 0;
|
|
1186
|
+
z-index: 2;
|
|
1187
|
+
display: flex;
|
|
1188
|
+
align-items: center;
|
|
1189
|
+
justify-content: space-between;
|
|
1190
|
+
gap: 12px;
|
|
1191
|
+
padding: 9px 24px 10px;
|
|
1192
|
+
background: var(--mirk-bg);
|
|
1193
|
+
border-bottom: 1px solid var(--mirk-input-border);
|
|
1194
|
+
opacity: 0;
|
|
1195
|
+
transform: translateY(-100%);
|
|
1196
|
+
pointer-events: none;
|
|
1197
|
+
transition: opacity 140ms ease, transform 160ms ease;
|
|
1198
|
+
}
|
|
1199
|
+
.hcms-shell.is-condensed .hcms-shell-minibar {
|
|
1200
|
+
opacity: 1;
|
|
1201
|
+
transform: none;
|
|
1202
|
+
pointer-events: auto;
|
|
1203
|
+
}
|
|
1204
|
+
.hcms-shell-minibar-title {
|
|
1205
|
+
font-size: 14px;
|
|
1206
|
+
line-height: 1;
|
|
1207
|
+
color: var(--mirk-fg);
|
|
1208
|
+
white-space: nowrap;
|
|
1209
|
+
overflow: hidden;
|
|
1210
|
+
text-overflow: ellipsis;
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
/* ---------- HEADER (no underline rule — whitespace separates the bands) ---------- */
|
|
1214
|
+
.hcms-shell-header {
|
|
1215
|
+
flex-shrink: 0;
|
|
1216
|
+
display: flex;
|
|
1217
|
+
align-items: flex-start;
|
|
1218
|
+
justify-content: space-between;
|
|
1219
|
+
gap: 12px;
|
|
1220
|
+
padding: 24px 24px 4px;
|
|
1221
|
+
}
|
|
1222
|
+
.hcms-shell-heading { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
|
|
1223
|
+
.hcms-shell-eyebrow {
|
|
1224
|
+
font-size: 11px;
|
|
1225
|
+
text-transform: uppercase;
|
|
1226
|
+
letter-spacing: 0.18em;
|
|
1227
|
+
color: var(--mirk-placeholder-color);
|
|
1228
|
+
}
|
|
1229
|
+
.hcms-shell-title {
|
|
1230
|
+
margin: 0;
|
|
1231
|
+
font-size: 18px;
|
|
1232
|
+
font-weight: 400;
|
|
1233
|
+
line-height: 1.2;
|
|
1234
|
+
color: var(--mirk-fg);
|
|
1235
|
+
}
|
|
1236
|
+
.hcms-shell-close.mirk-button {
|
|
1237
|
+
flex-shrink: 0;
|
|
1238
|
+
padding: 2px 9px 3px;
|
|
1239
|
+
line-height: 1;
|
|
1240
|
+
}
|
|
1241
|
+
.hcms-shell-close .mirk-button__label { font-size: 16px; }
|
|
1242
|
+
|
|
1243
|
+
/* ---------- FORM — generous, even vertical rhythm ---------- */
|
|
1244
|
+
.hcms-form {
|
|
1245
|
+
display: flex;
|
|
1246
|
+
flex-direction: column;
|
|
1247
|
+
gap: 26px;
|
|
1248
|
+
padding: 12px 24px 28px;
|
|
1249
|
+
}
|
|
1250
|
+
|
|
1251
|
+
/* one labeled scalar field */
|
|
1252
|
+
.hcms-field { display: flex; flex-direction: column; gap: 9px; }
|
|
1253
|
+
.hcms-field--row {
|
|
1254
|
+
flex-direction: row;
|
|
1255
|
+
align-items: center;
|
|
1256
|
+
justify-content: space-between;
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
/* themed field label */
|
|
1260
|
+
.hcms-label {
|
|
1261
|
+
font-size: 11px;
|
|
1262
|
+
text-transform: uppercase;
|
|
1263
|
+
letter-spacing: 0.14em;
|
|
1264
|
+
color: var(--mirk-sortable-label);
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1267
|
+
/* comfortable control padding + readable size, in mirk's own mono */
|
|
1268
|
+
.hcms-shell.pixel-quiet .mirk-input,
|
|
1269
|
+
.hcms-shell.pixel-quiet .mirk-textarea {
|
|
1270
|
+
font-size: 15px;
|
|
1271
|
+
padding: 9px 14px 10px;
|
|
1272
|
+
}
|
|
1273
|
+
.hcms-shell.pixel-quiet textarea.mirk-input { min-height: 76px; resize: vertical; }
|
|
1274
|
+
|
|
1275
|
+
/* default scalar fields: one-row textareas that grow with their content.
|
|
1276
|
+
Browsers without field-sizing get a scrollHeight fallback (enhance.js). */
|
|
1277
|
+
.hcms-shell.pixel-quiet .hcms-form textarea.mirk-textarea {
|
|
1278
|
+
field-sizing: content;
|
|
1279
|
+
resize: none;
|
|
1280
|
+
overflow: hidden;
|
|
1281
|
+
min-height: 0;
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
/* rich-text surface (@richtext): a contenteditable styled like a textarea */
|
|
1285
|
+
.hcms-shell.pixel-quiet .hcms-richtext {
|
|
1286
|
+
min-height: 2.5em;
|
|
1287
|
+
cursor: text;
|
|
1288
|
+
overflow-wrap: break-word;
|
|
1289
|
+
}
|
|
1290
|
+
.hcms-shell.pixel-quiet .hcms-richtext a {
|
|
1291
|
+
color: inherit;
|
|
1292
|
+
text-decoration: underline;
|
|
1293
|
+
text-underline-offset: 2px;
|
|
1294
|
+
}
|
|
1295
|
+
.hcms-shell.pixel-quiet .hcms-richtext:empty::before {
|
|
1296
|
+
content: attr(data-hcms-placeholder);
|
|
1297
|
+
color: var(--mirk-placeholder-color);
|
|
1298
|
+
}
|
|
1299
|
+
.hcms-shell.pixel-quiet .mirk-select__field {
|
|
1300
|
+
font-size: 15px;
|
|
1301
|
+
padding: 8px 40px 9px 14px;
|
|
1302
|
+
}
|
|
1303
|
+
.hcms-shell.pixel-quiet .mirk-radio__label,
|
|
1304
|
+
.hcms-shell.pixel-quiet .mirk-toggle__label,
|
|
1305
|
+
.hcms-shell.pixel-quiet .mirk-tags__input { font-size: 15px; }
|
|
1306
|
+
|
|
1307
|
+
/* inline radio row */
|
|
1308
|
+
.hcms-radio-row { display: flex; align-items: center; gap: 22px; flex-wrap: wrap; }
|
|
1309
|
+
|
|
1310
|
+
/* chip-field (the @chips built-in): a borderless inline input that sizes to its
|
|
1311
|
+
text, so chips read like static chips but stay inline-editable. */
|
|
1312
|
+
.hcms-shell .mirk-tags__chip { padding-right: 6px; }
|
|
1313
|
+
.hcms-shell .hcms-chip-field {
|
|
1314
|
+
border: 0; background: transparent; color: inherit; font: inherit;
|
|
1315
|
+
outline: none; min-width: 2ch; field-sizing: content; padding: 0;
|
|
1316
|
+
}
|
|
1317
|
+
.hcms-shell .hcms-chips .hcms-add { margin-top: 4px; align-self: flex-start; }
|
|
1318
|
+
|
|
1319
|
+
/* ---------- OBJECT GROUP — a quiet framed band, not a heavy card ---------- */
|
|
1320
|
+
.hcms-object {
|
|
1321
|
+
display: flex;
|
|
1322
|
+
flex-direction: column;
|
|
1323
|
+
gap: 16px;
|
|
1324
|
+
}
|
|
1325
|
+
.hcms-object-title {
|
|
1326
|
+
margin: 0;
|
|
1327
|
+
font-size: 11px;
|
|
1328
|
+
font-weight: 400;
|
|
1329
|
+
text-transform: uppercase;
|
|
1330
|
+
letter-spacing: 0.14em;
|
|
1331
|
+
color: var(--mirk-sortable-label);
|
|
1332
|
+
}
|
|
1333
|
+
.hcms-object-fields { display: flex; flex-direction: column; gap: 16px; }
|
|
1334
|
+
|
|
1335
|
+
/* ---------- SCALAR ARRAY — a calm list of mirk-input rows ---------- */
|
|
1336
|
+
.hcms-array { display: flex; flex-direction: column; gap: 14px; }
|
|
1337
|
+
.hcms-array-header { display: flex; align-items: baseline; justify-content: space-between; }
|
|
1338
|
+
.hcms-array-title {
|
|
1339
|
+
margin: 0;
|
|
1340
|
+
font-size: 11px;
|
|
1341
|
+
font-weight: 400;
|
|
1342
|
+
text-transform: uppercase;
|
|
1343
|
+
letter-spacing: 0.14em;
|
|
1344
|
+
color: var(--mirk-sortable-label);
|
|
1345
|
+
}
|
|
1346
|
+
/* The generic stacked-list layout is unlayered, so it would beat mirk's
|
|
1347
|
+
@layer-components rules on any slot that is also a mirk component. Exempt a
|
|
1348
|
+
mirk tags box so it keeps mirk's own row-wrap layout and inner padding. */
|
|
1349
|
+
.hcms-array-items:not(.mirk-tags) {
|
|
1350
|
+
list-style: none;
|
|
1351
|
+
margin: 0;
|
|
1352
|
+
padding: 0;
|
|
1353
|
+
display: flex;
|
|
1354
|
+
flex-direction: column;
|
|
1355
|
+
gap: 10px;
|
|
1356
|
+
}
|
|
1357
|
+
.hcms-array-item {
|
|
1358
|
+
display: flex;
|
|
1359
|
+
align-items: center;
|
|
1360
|
+
gap: 8px;
|
|
1361
|
+
}
|
|
1362
|
+
.hcms-array-item .mirk-input { flex: 1; min-width: 0; }
|
|
1363
|
+
|
|
1364
|
+
/* ---------- OBJECT ARRAY — mirk-sortable cards from the engine markup ---------- */
|
|
1365
|
+
.hcms-array--cards .hcms-array-items { gap: 14px; }
|
|
1366
|
+
.hcms-card.mirk-sortable__item { background: var(--mirk-bevel-bg); position: relative; }
|
|
1367
|
+
.hcms-card .hcms-card-fields { display: flex; flex-direction: column; flex: 1; min-width: 0; }
|
|
1368
|
+
.hcms-card .hcms-field {
|
|
1369
|
+
gap: 2px;
|
|
1370
|
+
padding: 8px 14px 9px;
|
|
1371
|
+
}
|
|
1372
|
+
.hcms-card .hcms-field:not(:last-child) { border-bottom: 1px solid var(--mirk-input-border); }
|
|
1373
|
+
.hcms-card .hcms-label { letter-spacing: 0.16em; }
|
|
1374
|
+
/* fields inside a card read as quiet rows, not chunky boxed inputs */
|
|
1375
|
+
.hcms-card .mirk-input,
|
|
1376
|
+
.hcms-card .mirk-textarea {
|
|
1377
|
+
border: none;
|
|
1378
|
+
background: transparent;
|
|
1379
|
+
padding: 0;
|
|
1380
|
+
font-size: 15px;
|
|
1381
|
+
}
|
|
1382
|
+
.hcms-card .mirk-input:focus-visible,
|
|
1383
|
+
.hcms-card .mirk-textarea:focus-visible { outline: none; }
|
|
1384
|
+
/* the remove × is pulled out to the card corner (below), so the controls row
|
|
1385
|
+
now only holds the sr-only move buttons — collapse it until one is focused. */
|
|
1386
|
+
.hcms-card-controls {
|
|
1387
|
+
display: flex;
|
|
1388
|
+
align-items: center;
|
|
1389
|
+
justify-content: flex-end;
|
|
1390
|
+
gap: 6px;
|
|
1391
|
+
padding: 0;
|
|
1392
|
+
}
|
|
1393
|
+
|
|
1394
|
+
/* quiet × remove control, shared by scalar-array rows and object-array cards */
|
|
1395
|
+
.hcms-remove {
|
|
1396
|
+
flex-shrink: 0;
|
|
1397
|
+
appearance: none;
|
|
1398
|
+
border: 0;
|
|
1399
|
+
background: none;
|
|
1400
|
+
color: var(--mirk-placeholder-color);
|
|
1401
|
+
cursor: pointer;
|
|
1402
|
+
font-size: 16px;
|
|
1403
|
+
line-height: 1;
|
|
1404
|
+
padding: 2px 6px;
|
|
1405
|
+
}
|
|
1406
|
+
.hcms-remove:hover { color: var(--mirk-destructive); }
|
|
1407
|
+
.hcms-remove[hidden] { display: none; }
|
|
1408
|
+
|
|
1409
|
+
/* object-array card: the delete control is a square corner button pinned
|
|
1410
|
+
top-right, carrying the card's own 1px border + a crisp-line × icon. */
|
|
1411
|
+
.hcms-remove--card {
|
|
1412
|
+
position: absolute;
|
|
1413
|
+
top: -1px;
|
|
1414
|
+
right: -1px;
|
|
1415
|
+
width: 18px;
|
|
1416
|
+
height: 18px;
|
|
1417
|
+
padding: 0;
|
|
1418
|
+
display: flex;
|
|
1419
|
+
align-items: center;
|
|
1420
|
+
justify-content: center;
|
|
1421
|
+
border: 1px solid var(--mirk-input-border);
|
|
1422
|
+
background: var(--mirk-bevel-bg);
|
|
1423
|
+
color: var(--mirk-placeholder-color);
|
|
1424
|
+
}
|
|
1425
|
+
.hcms-remove--card:hover { border-color: var(--mirk-destructive); }
|
|
1426
|
+
.hcms-remove--card .hcms-x { width: 64%; height: 64%; display: block; }
|
|
1427
|
+
|
|
1428
|
+
/* "+ Add" — quiet, pinned left */
|
|
1429
|
+
.hcms-add.mirk-button { align-self: flex-start; }
|
|
1430
|
+
|
|
1431
|
+
/* ---------- UPLOAD COMPONENTS (@file / @image) ----------
|
|
1432
|
+
Built on the kit's mirk-file / mirk-image--compact chrome. The native picker
|
|
1433
|
+
is visually hidden but focusable (the mirk-button label is the visible
|
|
1434
|
+
trigger and rings via :has(:focus-visible)); it is NOT .mirk-*__input, so the
|
|
1435
|
+
vendored mirk runtime never handles it. The empty/filled chrome is driven by
|
|
1436
|
+
the bound leaf's value attribute (src/href) in CSS — no JS state to desync. */
|
|
1437
|
+
.hcms-upload input[type="file"] {
|
|
1438
|
+
position: absolute;
|
|
1439
|
+
width: 1px;
|
|
1440
|
+
height: 1px;
|
|
1441
|
+
padding: 0;
|
|
1442
|
+
margin: -1px;
|
|
1443
|
+
overflow: hidden;
|
|
1444
|
+
clip: rect(0, 0, 0, 0);
|
|
1445
|
+
white-space: nowrap;
|
|
1446
|
+
border: 0;
|
|
1447
|
+
}
|
|
1448
|
+
|
|
1449
|
+
/* @image: show the upload button until the bound <img> carries a real src. */
|
|
1450
|
+
.hcms-upload--image .mirk-image__thumb { display: none; }
|
|
1451
|
+
.hcms-upload--image:has(.mirk-image__preview[src]:not([src=""])) .mirk-image__upload { display: none; }
|
|
1452
|
+
.hcms-upload--image:has(.mirk-image__preview[src]:not([src=""])) .mirk-image__thumb { display: inline-block; }
|
|
1453
|
+
|
|
1454
|
+
/* @file: reveal the clear × and the filename only once the bound <a> has href. */
|
|
1455
|
+
.hcms-upload--file .hcms-upload-clear { display: none; }
|
|
1456
|
+
.hcms-upload--file:has(a.mirk-file__name[href]:not([href=""])) .hcms-upload-clear { display: inline-flex; }
|
|
1457
|
+
/* A filled filename uses the bright foreground (the kit's [data-filled] look),
|
|
1458
|
+
driven by the bound href so there's no JS attribute to keep in sync — the
|
|
1459
|
+
vendored runtime that would otherwise stamp data-filled is inert here. */
|
|
1460
|
+
.hcms-upload--file:has(a.mirk-file__name[href]:not([href=""])) a.mirk-file__name {
|
|
1461
|
+
color: var(--mirk-bevel-fg);
|
|
1462
|
+
}
|
|
1463
|
+
.hcms-upload--file a.mirk-file__name:empty {
|
|
1464
|
+
text-decoration: none;
|
|
1465
|
+
cursor: default;
|
|
1466
|
+
}
|
|
1467
|
+
.hcms-upload--file a.mirk-file__name:empty::after {
|
|
1468
|
+
content: "No file chosen";
|
|
1469
|
+
color: var(--mirk-placeholder-color);
|
|
1470
|
+
}
|
|
1471
|
+
|
|
1472
|
+
/* ---------- UPLOADING (spec §9) ----------
|
|
1473
|
+
One attribute, [data-hcms-uploading], set on the field for as long as the host
|
|
1474
|
+
has the bytes, plus --hcms-upload-progress carrying the percent. No markup of
|
|
1475
|
+
its own: the templates keep their exact shape, so a half-finished upload cannot
|
|
1476
|
+
leave an orphan node behind in the form. The at-upload-time picture is painted
|
|
1477
|
+
on the frame as a background, never assigned to the bound <img>, because that
|
|
1478
|
+
img IS the field's value and a commit landing mid-upload would write a
|
|
1479
|
+
two-megabyte data URL straight into the live page. */
|
|
1480
|
+
.hcms-upload[data-hcms-uploading] .mirk-image__frame {
|
|
1481
|
+
background-size: cover;
|
|
1482
|
+
background-position: center;
|
|
1483
|
+
}
|
|
1484
|
+
/* The empty state hides the thumb, so an upload into an empty field would have
|
|
1485
|
+
nowhere to show. Uploading reveals it, preview or not. */
|
|
1486
|
+
.hcms-upload--image[data-hcms-uploading] .mirk-image__thumb { display: inline-block; }
|
|
1487
|
+
.hcms-upload--image[data-hcms-uploading] .mirk-image__upload { display: none; }
|
|
1488
|
+
/* No × mid-flight: clearing writes the leaf empty, which says nothing about the
|
|
1489
|
+
request still running and reads as a cancel that is not one. */
|
|
1490
|
+
.hcms-upload[data-hcms-uploading] .hcms-upload-clear { display: none; }
|
|
1491
|
+
|
|
1492
|
+
.hcms-upload[data-hcms-uploading] .mirk-image__frame::after,
|
|
1493
|
+
.hcms-upload--file[data-hcms-uploading] .mirk-file::after {
|
|
1494
|
+
content: "";
|
|
1495
|
+
position: absolute;
|
|
1496
|
+
left: 0;
|
|
1497
|
+
bottom: 0;
|
|
1498
|
+
height: 3px;
|
|
1499
|
+
width: var(--hcms-upload-progress, 0%);
|
|
1500
|
+
background: var(--mirk-bevel-fg);
|
|
1501
|
+
transition: width 120ms linear;
|
|
1502
|
+
}
|
|
1503
|
+
/* The @file row has no frame to hang the bar on, so it becomes the positioning
|
|
1504
|
+
context itself. */
|
|
1505
|
+
.hcms-upload--file[data-hcms-uploading] .mirk-file { position: relative; }
|
|
1506
|
+
|
|
1507
|
+
/* clear-× (vendored-inert; data-hcms-action, never .mirk-*__remove). Bare × for
|
|
1508
|
+
@file, a pinned corner badge for @image — mirroring .hcms-remove / --card. */
|
|
1509
|
+
.hcms-upload-clear {
|
|
1510
|
+
flex-shrink: 0;
|
|
1511
|
+
appearance: none;
|
|
1512
|
+
border: 0;
|
|
1513
|
+
background: none;
|
|
1514
|
+
color: var(--mirk-placeholder-color);
|
|
1515
|
+
cursor: pointer;
|
|
1516
|
+
line-height: 0;
|
|
1517
|
+
padding: 2px 4px;
|
|
1518
|
+
display: inline-flex;
|
|
1519
|
+
align-items: center;
|
|
1520
|
+
justify-content: center;
|
|
1521
|
+
}
|
|
1522
|
+
.hcms-upload-clear:hover { color: var(--mirk-destructive); }
|
|
1523
|
+
.hcms-upload-clear .hcms-x { display: block; width: 14px; height: 14px; }
|
|
1524
|
+
|
|
1525
|
+
.hcms-upload-clear--badge {
|
|
1526
|
+
position: absolute;
|
|
1527
|
+
top: -7px;
|
|
1528
|
+
right: -7px;
|
|
1529
|
+
width: 18px;
|
|
1530
|
+
height: 18px;
|
|
1531
|
+
padding: 0;
|
|
1532
|
+
border-radius: 50%;
|
|
1533
|
+
border: 1px solid var(--mirk-input-border);
|
|
1534
|
+
background: var(--mirk-bevel-bg);
|
|
1535
|
+
color: var(--mirk-bevel-fg);
|
|
1536
|
+
}
|
|
1537
|
+
.hcms-upload-clear--badge:hover { color: var(--mirk-destructive); border-color: var(--mirk-destructive); }
|
|
1538
|
+
.hcms-upload-clear--badge .hcms-x { width: 10px; height: 10px; }
|
|
1539
|
+
|
|
1540
|
+
/* ---------- UNRESOLVED-FIELDS NOTICE ---------- */
|
|
1541
|
+
.hcms-shell-notice {
|
|
1542
|
+
font-size: 12px;
|
|
1543
|
+
line-height: 1.45;
|
|
1544
|
+
white-space: pre-line;
|
|
1545
|
+
color: var(--mirk-mark-fg);
|
|
1546
|
+
background: var(--mirk-bevel-bg);
|
|
1547
|
+
border: 1px solid var(--mirk-input-border);
|
|
1548
|
+
padding: 8px 12px;
|
|
1549
|
+
margin: 0 24px 8px;
|
|
1550
|
+
}
|
|
1551
|
+
.hcms-shell-notice[hidden] { display: none; }
|
|
1552
|
+
|
|
1553
|
+
/* ---------- ERROR BANNER + inline errors ---------- */
|
|
1554
|
+
.hcms-shell-error,
|
|
1555
|
+
.hcms-error {
|
|
1556
|
+
font-size: 12px;
|
|
1557
|
+
line-height: 1.45;
|
|
1558
|
+
color: var(--mirk-destructive);
|
|
1559
|
+
background: var(--mirk-bevel-bg);
|
|
1560
|
+
border: 1px solid var(--mirk-destructive);
|
|
1561
|
+
padding: 8px 12px;
|
|
1562
|
+
}
|
|
1563
|
+
.hcms-shell-error { margin: 0 24px; }
|
|
1564
|
+
.hcms-error { margin-top: 6px; }
|
|
1565
|
+
.hcms-shell-error[hidden],
|
|
1566
|
+
.hcms-error[hidden] { display: none; }
|
|
1567
|
+
|
|
1568
|
+
/* A note, not a refusal: the file WAS stored, in the page, and this says why it
|
|
1569
|
+
is not on the host. Same slot, so there is one place a field ever speaks. */
|
|
1570
|
+
.hcms-error--info {
|
|
1571
|
+
color: var(--mirk-mark-fg);
|
|
1572
|
+
border-color: var(--mirk-input-border);
|
|
1573
|
+
}
|
|
1574
|
+
|
|
1575
|
+
/* ---------- SAVE (sits at the end of the scrolling form, not pinned) ---------- */
|
|
1576
|
+
.hcms-shell-footer {
|
|
1577
|
+
display: flex;
|
|
1578
|
+
justify-content: flex-end;
|
|
1579
|
+
padding: 4px 24px 28px;
|
|
1580
|
+
}
|
|
1581
|
+
.hcms-shell-footer[hidden] { display: none; }
|
|
1582
|
+
|
|
1583
|
+
/* ---------- sr-only move buttons: hidden, visible on keyboard focus ---------- */
|
|
1584
|
+
.hcms-sr-only {
|
|
1585
|
+
position: absolute;
|
|
1586
|
+
width: 1px;
|
|
1587
|
+
height: 1px;
|
|
1588
|
+
padding: 0;
|
|
1589
|
+
margin: -1px;
|
|
1590
|
+
overflow: hidden;
|
|
1591
|
+
clip: rect(0, 0, 0, 0);
|
|
1592
|
+
white-space: nowrap;
|
|
1593
|
+
border: 0;
|
|
1594
|
+
}
|
|
1595
|
+
.hcms-sr-only:focus {
|
|
1596
|
+
position: static;
|
|
1597
|
+
width: auto;
|
|
1598
|
+
height: auto;
|
|
1599
|
+
padding: 2px 6px;
|
|
1600
|
+
margin: 0 2px;
|
|
1601
|
+
overflow: visible;
|
|
1602
|
+
clip: auto;
|
|
1603
|
+
white-space: normal;
|
|
1604
|
+
background: var(--mirk-bevel-bg);
|
|
1605
|
+
border: 1px solid var(--mirk-input-border);
|
|
1606
|
+
color: var(--mirk-fg);
|
|
1607
|
+
font-size: 12px;
|
|
1608
|
+
cursor: pointer;
|
|
1609
|
+
}
|
|
1610
|
+
.hcms-sr-only[hidden] { display: none; }
|
|
1611
|
+
|
|
1612
|
+
/* ============================================================
|
|
1613
|
+
INLINE VIEW GEOMETRY — not a panel. A transparent full-viewport
|
|
1614
|
+
host whose children are the only interactive surfaces, so the page
|
|
1615
|
+
underneath stays fully usable while the editor is open.
|
|
1616
|
+
============================================================ */
|
|
1617
|
+
.hcms-shell.pixel-quiet.hcms-inline {
|
|
1618
|
+
position: fixed;
|
|
1619
|
+
inset: 0;
|
|
1620
|
+
z-index: 2147483000;
|
|
1621
|
+
/* The host must never intercept a click meant for the page. Each child
|
|
1622
|
+
re-enables pointer events for itself. */
|
|
1623
|
+
pointer-events: none;
|
|
1624
|
+
background: none;
|
|
1625
|
+
border: 0;
|
|
1626
|
+
box-shadow: none;
|
|
1627
|
+
color: var(--mirk-fg);
|
|
1628
|
+
}
|
|
1629
|
+
.hcms-inline > *,
|
|
1630
|
+
.hcms-inline-layer > * { pointer-events: auto; }
|
|
1631
|
+
.hcms-inline-layer { position: absolute; inset: 0; pointer-events: none; }
|
|
1632
|
+
|
|
1633
|
+
.hcms-inline-bar {
|
|
1634
|
+
position: absolute;
|
|
1635
|
+
left: 50%;
|
|
1636
|
+
bottom: 16px;
|
|
1637
|
+
transform: translateX(-50%);
|
|
1638
|
+
max-width: min(560px, calc(100vw - 32px));
|
|
1639
|
+
display: flex;
|
|
1640
|
+
flex-direction: column;
|
|
1641
|
+
gap: 6px;
|
|
1642
|
+
}
|
|
1643
|
+
|
|
1644
|
+
.hcms-inline-notice,
|
|
1645
|
+
.hcms-inline-error {
|
|
1646
|
+
padding: 8px 12px;
|
|
1647
|
+
border-radius: 8px;
|
|
1648
|
+
font-size: 14px;
|
|
1649
|
+
line-height: 1.4;
|
|
1650
|
+
border: 1px solid var(--mirk-input-border);
|
|
1651
|
+
background: var(--mirk-bg);
|
|
1652
|
+
color: var(--mirk-fg);
|
|
1653
|
+
box-shadow: 0 12px 32px -20px rgba(43, 36, 27, 0.5);
|
|
1654
|
+
}
|
|
1655
|
+
.hcms-inline-notice { white-space: pre-line; }
|
|
1656
|
+
.hcms-inline-error { border-color: var(--mirk-destructive); color: var(--mirk-destructive); }
|
|
1657
|
+
.hcms-inline-notice[hidden],
|
|
1658
|
+
.hcms-inline-error[hidden] { display: none; }
|
|
1659
|
+
|
|
1660
|
+
.hcms-inline-pop {
|
|
1661
|
+
position: absolute;
|
|
1662
|
+
top: 0;
|
|
1663
|
+
left: 0;
|
|
1664
|
+
width: max-content;
|
|
1665
|
+
max-width: min(360px, calc(100vw - 24px));
|
|
1666
|
+
padding: 10px;
|
|
1667
|
+
border-radius: 8px;
|
|
1668
|
+
border: 1px solid var(--mirk-input-border);
|
|
1669
|
+
background: var(--mirk-bg);
|
|
1670
|
+
color: var(--mirk-fg);
|
|
1671
|
+
box-shadow: 0 16px 40px -22px rgba(43, 36, 27, 0.55);
|
|
1672
|
+
/* Above the handles. They are positioned with z-index: 1 while the popover
|
|
1673
|
+
sat at auto, so a handle painted over the very field it had just opened
|
|
1674
|
+
and covered the text in it. The popover is what someone is using; a handle
|
|
1675
|
+
is only an offer to open one. */
|
|
1676
|
+
z-index: 2;
|
|
1677
|
+
}
|
|
1678
|
+
.hcms-inline-pop[hidden] { display: none; }
|
|
1679
|
+
|
|
1680
|
+
.hcms-inline-handle {
|
|
1681
|
+
position: absolute;
|
|
1682
|
+
top: 0;
|
|
1683
|
+
left: 0;
|
|
1684
|
+
z-index: 1;
|
|
1685
|
+
will-change: transform;
|
|
1686
|
+
}
|
|
1687
|
+
.hcms-inline-handle[hidden] { display: none; }
|
|
1688
|
+
|
|
1689
|
+
/* The list controls: one ↑ ↓ ✕ strip per row, one Add per list. Positioned the
|
|
1690
|
+
same way a handle is and by the same pass, so they carry the same absolute
|
|
1691
|
+
origin and the same will-change. */
|
|
1692
|
+
.hcms-inline-row-controls {
|
|
1693
|
+
position: absolute;
|
|
1694
|
+
top: 0;
|
|
1695
|
+
left: 0;
|
|
1696
|
+
z-index: 1;
|
|
1697
|
+
display: flex;
|
|
1698
|
+
gap: 2px;
|
|
1699
|
+
will-change: transform;
|
|
1700
|
+
}
|
|
1701
|
+
.hcms-inline-row-controls[hidden] { display: none; }
|
|
1702
|
+
|
|
1703
|
+
.hcms-inline-list-add {
|
|
1704
|
+
position: absolute;
|
|
1705
|
+
top: 0;
|
|
1706
|
+
left: 0;
|
|
1707
|
+
z-index: 1;
|
|
1708
|
+
will-change: transform;
|
|
1709
|
+
}
|
|
1710
|
+
.hcms-inline-list-add[hidden] { display: none; }
|
|
1711
|
+
|
|
1712
|
+
.hcms-inline-list-button {
|
|
1713
|
+
min-width: 28px;
|
|
1714
|
+
min-height: 28px;
|
|
1715
|
+
}
|
|
1716
|
+
.hcms-inline-list-button[hidden] { display: none; }
|
|
1717
|
+
|
|
1718
|
+
/* A finger is not a mouse pointer: on touch the same three controls get the
|
|
1719
|
+
44px target the platform guidelines ask for. */
|
|
1720
|
+
@media (pointer: coarse) {
|
|
1721
|
+
.hcms-inline-list-button {
|
|
1722
|
+
min-width: 44px;
|
|
1723
|
+
min-height: 44px;
|
|
1724
|
+
}
|
|
1725
|
+
}
|
|
1726
|
+
|
|
1727
|
+
.hcms-inline-toggle { align-self: center; }
|
|
1728
|
+
.hcms-inline-count {
|
|
1729
|
+
padding: 6px 12px;
|
|
1730
|
+
border-radius: 999px;
|
|
1731
|
+
font-size: 13px;
|
|
1732
|
+
border: 1px solid var(--mirk-input-border);
|
|
1733
|
+
background: var(--mirk-bg);
|
|
1734
|
+
color: var(--mirk-fg);
|
|
1735
|
+
align-self: center;
|
|
1736
|
+
}
|
|
1737
|
+
.hcms-inline-count[hidden] { display: none; }
|
|
1738
|
+
|
|
1739
|
+
/* The sidebar handoff: the count of ruled fields with no place on the page,
|
|
1740
|
+
and the one tap out to the view that can edit them. Same pill as the count
|
|
1741
|
+
above, because it is the same kind of statement about this session. */
|
|
1742
|
+
.hcms-inline-handoff {
|
|
1743
|
+
display: flex;
|
|
1744
|
+
align-items: center;
|
|
1745
|
+
gap: 10px;
|
|
1746
|
+
padding: 6px 6px 6px 12px;
|
|
1747
|
+
border-radius: 999px;
|
|
1748
|
+
font-size: 13px;
|
|
1749
|
+
border: 1px solid var(--mirk-input-border);
|
|
1750
|
+
background: var(--mirk-bg);
|
|
1751
|
+
color: var(--mirk-fg);
|
|
1752
|
+
align-self: center;
|
|
1753
|
+
}
|
|
1754
|
+
.hcms-inline-handoff[hidden] { display: none; }
|
|
1755
|
+
|
|
1756
|
+
/* One field at a time. Scoped to the inline host: [data-hcms-shell] is on BOTH
|
|
1757
|
+
hosts, so an unscoped rule hides the sidebar's whole form too. */
|
|
1758
|
+
.hcms-inline .hcms-form [data-hcms-path] { display: none; }
|
|
1759
|
+
.hcms-inline .hcms-form [data-hcms-path].is-hcms-inline-onpath,
|
|
1760
|
+
.hcms-inline .hcms-form [data-hcms-path].is-hcms-inline-active { display: block; }
|
|
1761
|
+
|
|
1762
|
+
.hcms-inline-highlight {
|
|
1763
|
+
position: absolute;
|
|
1764
|
+
top: 0;
|
|
1765
|
+
left: 0;
|
|
1766
|
+
pointer-events: none;
|
|
1767
|
+
border: 2px solid var(--mirk-focus-color);
|
|
1768
|
+
border-radius: 4px;
|
|
1769
|
+
box-sizing: border-box;
|
|
1770
|
+
will-change: transform;
|
|
1771
|
+
}
|
|
1772
|
+
.hcms-inline-highlight[hidden] { display: none; }
|