@morphemecms/cms 0.1.0 → 0.2.0-next-20261104150211
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/CHANGELOG.md +12 -0
- package/LICENSE +21 -21
- package/README.md +51 -51
- package/astro.mjs +162 -162
- package/bin/morpheme.mjs +38 -38
- package/client.d.ts +10 -10
- package/defaults/blockTexts.ts +33 -33
- package/defaults/collections.ts +774 -774
- package/defaults/colors.ts +125 -125
- package/defaults/company.ts +20 -20
- package/defaults/editor.ts +178 -178
- package/defaults/internalLinks.ts +30 -30
- package/defaults/opens.ts +18 -18
- package/defaults/popup.tsx +93 -93
- package/defaults/privacy.ts +79 -79
- package/defaults/rules.ts +450 -450
- package/defaults/schema.ts +16 -16
- package/defaults/sitedata.ts +129 -129
- package/defaults/standard.ts +106 -106
- package/defaults/standardPages.ts +87 -87
- package/defaults/texts.ts +481 -481
- package/demo/README.md +26 -26
- package/demo/src/content/blog/build-a-page-from-blocks.md +19 -19
- package/demo/src/content/blog/colors-everyone-can-read.md +19 -19
- package/demo/src/content/blog/edit-your-website-from-your-phone.md +21 -21
- package/demo/src/content/blog/every-save-is-a-version.md +21 -21
- package/demo/src/content/blog/schedule-a-post.md +17 -17
- package/demo/src/content/blog/secure-from-day-one.md +17 -17
- package/demo/src/content/blog/seo-without-the-guesswork.md +23 -23
- package/demo/src/content/blog/switch-themes-without-losing-anything.md +23 -23
- package/demo/src/content/blog/the-app-store.md +21 -21
- package/demo/src/content/pages/about.md +22 -22
- package/demo/src/content/pages/app-store.md +30 -30
- package/demo/src/content/pages/blocks.md +98 -98
- package/demo/src/content/pages/blog-page.md +11 -11
- package/demo/src/content/pages/contact.md +16 -16
- package/demo/src/content/pages/get-started.md +20 -20
- package/demo/src/content/pages/home.md +26 -26
- package/demo/src/content/pages/page-not-found.md +11 -11
- package/demo/src/content/pages/privacy-policy.md +24 -24
- package/demo/src/data/blocks.json +25 -25
- package/demo/src/data/booking.json +6 -6
- package/demo/src/data/categories/apps.json +6 -6
- package/demo/src/data/categories/design.json +6 -6
- package/demo/src/data/categories/editing.json +6 -6
- package/demo/src/data/categories/security.json +6 -6
- package/demo/src/data/categories/seo.json +6 -6
- package/demo/src/data/colors.json +75 -75
- package/demo/src/data/contact.json +8 -8
- package/demo/src/data/cookies.json +21 -21
- package/demo/src/data/footer.json +27 -27
- package/demo/src/data/menu.json +35 -35
- package/demo/src/data/mobile-menu.json +25 -25
- package/demo/src/data/popups/booking-bar.json +13 -13
- package/demo/src/data/popups/try-the-editor.json +16 -16
- package/demo/src/data/standard-pages.json +8 -8
- package/demo/src/data/testimonials/sample-bakery.json +10 -10
- package/demo/src/data/testimonials/sample-clinic.json +10 -10
- package/demo/src/data/testimonials/sample-studio.json +10 -10
- package/demo/src/site/colors.ts +11 -11
- package/demo/src/site/config.ts +19 -19
- package/icons/lucide/LICENSE +43 -43
- package/icons/lucide/address-book.svg +1 -1
- package/icons/lucide/app-window.svg +1 -1
- package/icons/lucide/arrow-counter-clockwise.svg +1 -1
- package/icons/lucide/arrow-down.svg +1 -1
- package/icons/lucide/arrow-left.svg +1 -1
- package/icons/lucide/arrow-right.svg +1 -1
- package/icons/lucide/arrow-square-out.svg +1 -1
- package/icons/lucide/arrow-u-up-left.svg +1 -1
- package/icons/lucide/arrow-u-up-right.svg +1 -1
- package/icons/lucide/arrow-up-right.svg +1 -1
- package/icons/lucide/arrow-up.svg +1 -1
- package/icons/lucide/arrows-down-up.svg +1 -1
- package/icons/lucide/arrows-in-line-horizontal.svg +1 -1
- package/icons/lucide/arrows-out-line-horizontal.svg +1 -1
- package/icons/lucide/article.svg +1 -1
- package/icons/lucide/bank.svg +1 -1
- package/icons/lucide/bell.svg +1 -1
- package/icons/lucide/bicycle.svg +1 -1
- package/icons/lucide/binoculars.svg +1 -1
- package/icons/lucide/book-open-text.svg +1 -1
- package/icons/lucide/book-open.svg +1 -1
- package/icons/lucide/browser.svg +1 -1
- package/icons/lucide/buildings.svg +1 -1
- package/icons/lucide/bus.svg +1 -1
- package/icons/lucide/calendar-blank.svg +1 -1
- package/icons/lucide/calendar-check.svg +1 -1
- package/icons/lucide/car.svg +1 -1
- package/icons/lucide/cards.svg +1 -1
- package/icons/lucide/caret-down.svg +1 -1
- package/icons/lucide/caret-left.svg +1 -1
- package/icons/lucide/caret-right.svg +1 -1
- package/icons/lucide/caret-up.svg +1 -1
- package/icons/lucide/certificate.svg +1 -1
- package/icons/lucide/chart-line-up.svg +1 -1
- package/icons/lucide/chats.svg +1 -1
- package/icons/lucide/check-circle.svg +1 -1
- package/icons/lucide/check.svg +1 -1
- package/icons/lucide/circle-half.svg +1 -1
- package/icons/lucide/circle.svg +1 -1
- package/icons/lucide/clock-counter-clockwise.svg +1 -1
- package/icons/lucide/clock.svg +1 -1
- package/icons/lucide/code.svg +1 -1
- package/icons/lucide/coffee.svg +1 -1
- package/icons/lucide/columns.svg +1 -1
- package/icons/lucide/cookie.svg +1 -1
- package/icons/lucide/copy.svg +1 -1
- package/icons/lucide/credit-card.svg +1 -1
- package/icons/lucide/currency-circle-dollar.svg +1 -1
- package/icons/lucide/cursor-click.svg +1 -1
- package/icons/lucide/database.svg +1 -1
- package/icons/lucide/desktop.svg +1 -1
- package/icons/lucide/device-mobile.svg +1 -1
- package/icons/lucide/door-open.svg +1 -1
- package/icons/lucide/download-simple.svg +1 -1
- package/icons/lucide/envelope-simple.svg +1 -1
- package/icons/lucide/eye-slash.svg +1 -1
- package/icons/lucide/eye.svg +1 -1
- package/icons/lucide/file-pdf.svg +1 -1
- package/icons/lucide/file-text.svg +1 -1
- package/icons/lucide/file-video.svg +1 -1
- package/icons/lucide/file-zip.svg +1 -1
- package/icons/lucide/flower-lotus.svg +1 -1
- package/icons/lucide/folder-simple.svg +1 -1
- package/icons/lucide/funnel.svg +1 -1
- package/icons/lucide/gauge.svg +1 -1
- package/icons/lucide/gear.svg +1 -1
- package/icons/lucide/github-logo.svg +1 -1
- package/icons/lucide/globe.svg +1 -1
- package/icons/lucide/google-logo.svg +1 -1
- package/icons/lucide/graduation-cap.svg +1 -1
- package/icons/lucide/hammer.svg +1 -1
- package/icons/lucide/hand-heart.svg +1 -1
- package/icons/lucide/handshake.svg +1 -1
- package/icons/lucide/hard-drives.svg +1 -1
- package/icons/lucide/heart.svg +1 -1
- package/icons/lucide/house.svg +1 -1
- package/icons/lucide/image-square.svg +1 -1
- package/icons/lucide/image.svg +1 -1
- package/icons/lucide/info.svg +1 -1
- package/icons/lucide/keyboard.svg +1 -1
- package/icons/lucide/leaf.svg +1 -1
- package/icons/lucide/lifebuoy.svg +1 -1
- package/icons/lucide/lightbulb.svg +1 -1
- package/icons/lucide/link-break.svg +1 -1
- package/icons/lucide/link-simple.svg +1 -1
- package/icons/lucide/list-bullets.svg +1 -1
- package/icons/lucide/list-checks.svg +1 -1
- package/icons/lucide/list-numbers.svg +1 -1
- package/icons/lucide/list.svg +1 -1
- package/icons/lucide/lock-simple-open.svg +1 -1
- package/icons/lucide/lock-simple.svg +1 -1
- package/icons/lucide/magnifying-glass.svg +1 -1
- package/icons/lucide/map-pin.svg +1 -1
- package/icons/lucide/map-trifold.svg +1 -1
- package/icons/lucide/medal.svg +1 -1
- package/icons/lucide/megaphone.svg +1 -1
- package/icons/lucide/minus.svg +1 -1
- package/icons/lucide/moon.svg +1 -1
- package/icons/lucide/newspaper.svg +1 -1
- package/icons/lucide/pack.json +23 -23
- package/icons/lucide/paint-brush-broad.svg +1 -1
- package/icons/lucide/palette.svg +1 -1
- package/icons/lucide/paper-plane-tilt.svg +1 -1
- package/icons/lucide/pencil-simple.svg +1 -1
- package/icons/lucide/phone.svg +1 -1
- package/icons/lucide/play-fill.svg +1 -1
- package/icons/lucide/plus.svg +1 -1
- package/icons/lucide/prohibit.svg +1 -1
- package/icons/lucide/puzzle-piece.svg +1 -1
- package/icons/lucide/question.svg +1 -1
- package/icons/lucide/quotes.svg +1 -1
- package/icons/lucide/rows.svg +1 -1
- package/icons/lucide/ruler.svg +1 -1
- package/icons/lucide/scan.svg +1 -1
- package/icons/lucide/shapes.svg +1 -1
- package/icons/lucide/share-network.svg +1 -1
- package/icons/lucide/shield-check.svg +1 -1
- package/icons/lucide/sidebar-simple.svg +1 -1
- package/icons/lucide/sign-out.svg +1 -1
- package/icons/lucide/signpost.svg +1 -1
- package/icons/lucide/sliders-horizontal.svg +1 -1
- package/icons/lucide/smiley.svg +1 -1
- package/icons/lucide/sparkle.svg +1 -1
- package/icons/lucide/square-half-bottom.svg +1 -1
- package/icons/lucide/square.svg +1 -1
- package/icons/lucide/squares-four.svg +1 -1
- package/icons/lucide/sticker.svg +1 -1
- package/icons/lucide/storefront.svg +1 -1
- package/icons/lucide/sun.svg +1 -1
- package/icons/lucide/swatches.svg +1 -1
- package/icons/lucide/tag.svg +1 -1
- package/icons/lucide/text-aa.svg +1 -1
- package/icons/lucide/text-align-left.svg +1 -1
- package/icons/lucide/text-b.svg +1 -1
- package/icons/lucide/text-h-one.svg +1 -1
- package/icons/lucide/text-h-three.svg +1 -1
- package/icons/lucide/text-h-two.svg +1 -1
- package/icons/lucide/text-italic.svg +1 -1
- package/icons/lucide/text-t.svg +1 -1
- package/icons/lucide/ticket.svg +1 -1
- package/icons/lucide/toggle-right.svg +1 -1
- package/icons/lucide/train.svg +1 -1
- package/icons/lucide/trash.svg +1 -1
- package/icons/lucide/upload-simple.svg +1 -1
- package/icons/lucide/user-circle.svg +1 -1
- package/icons/lucide/user.svg +1 -1
- package/icons/lucide/users-three.svg +1 -1
- package/icons/lucide/users.svg +1 -1
- package/icons/lucide/video-camera.svg +1 -1
- package/icons/lucide/warning-circle.svg +1 -1
- package/icons/lucide/warning.svg +1 -1
- package/icons/lucide/wave-sine.svg +1 -1
- package/icons/lucide/wheelchair.svg +1 -1
- package/icons/lucide/wrench.svg +1 -1
- package/icons/lucide/x.svg +1 -1
- package/icons/material-symbols/LICENSE +201 -201
- package/icons/material-symbols/address-book.svg +1 -1
- package/icons/material-symbols/app-window.svg +1 -1
- package/icons/material-symbols/arrow-counter-clockwise.svg +1 -1
- package/icons/material-symbols/arrow-down.svg +1 -1
- package/icons/material-symbols/arrow-left.svg +1 -1
- package/icons/material-symbols/arrow-right.svg +1 -1
- package/icons/material-symbols/arrow-square-out.svg +1 -1
- package/icons/material-symbols/arrow-u-up-left.svg +1 -1
- package/icons/material-symbols/arrow-u-up-right.svg +1 -1
- package/icons/material-symbols/arrow-up-right.svg +1 -1
- package/icons/material-symbols/arrow-up.svg +1 -1
- package/icons/material-symbols/arrows-down-up.svg +1 -1
- package/icons/material-symbols/arrows-in-line-horizontal.svg +1 -1
- package/icons/material-symbols/arrows-out-line-horizontal.svg +1 -1
- package/icons/material-symbols/article.svg +1 -1
- package/icons/material-symbols/bank.svg +1 -1
- package/icons/material-symbols/bell.svg +1 -1
- package/icons/material-symbols/bicycle.svg +1 -1
- package/icons/material-symbols/binoculars.svg +1 -1
- package/icons/material-symbols/book-open-text.svg +1 -1
- package/icons/material-symbols/book-open.svg +1 -1
- package/icons/material-symbols/browser.svg +1 -1
- package/icons/material-symbols/buildings.svg +1 -1
- package/icons/material-symbols/bus.svg +1 -1
- package/icons/material-symbols/calendar-blank.svg +1 -1
- package/icons/material-symbols/calendar-check.svg +1 -1
- package/icons/material-symbols/car.svg +1 -1
- package/icons/material-symbols/cards.svg +1 -1
- package/icons/material-symbols/caret-down.svg +1 -1
- package/icons/material-symbols/caret-left.svg +1 -1
- package/icons/material-symbols/caret-right.svg +1 -1
- package/icons/material-symbols/caret-up.svg +1 -1
- package/icons/material-symbols/certificate.svg +1 -1
- package/icons/material-symbols/chart-line-up.svg +1 -1
- package/icons/material-symbols/chats.svg +1 -1
- package/icons/material-symbols/check-circle.svg +1 -1
- package/icons/material-symbols/check.svg +1 -1
- package/icons/material-symbols/circle-half.svg +1 -1
- package/icons/material-symbols/circle.svg +1 -1
- package/icons/material-symbols/clock-counter-clockwise.svg +1 -1
- package/icons/material-symbols/clock.svg +1 -1
- package/icons/material-symbols/code.svg +1 -1
- package/icons/material-symbols/coffee.svg +1 -1
- package/icons/material-symbols/columns.svg +1 -1
- package/icons/material-symbols/cookie.svg +1 -1
- package/icons/material-symbols/copy.svg +1 -1
- package/icons/material-symbols/credit-card.svg +1 -1
- package/icons/material-symbols/currency-circle-dollar.svg +1 -1
- package/icons/material-symbols/cursor-click.svg +1 -1
- package/icons/material-symbols/database.svg +1 -1
- package/icons/material-symbols/desktop.svg +1 -1
- package/icons/material-symbols/device-mobile.svg +1 -1
- package/icons/material-symbols/door-open.svg +1 -1
- package/icons/material-symbols/download-simple.svg +1 -1
- package/icons/material-symbols/envelope-simple.svg +1 -1
- package/icons/material-symbols/eye-slash.svg +1 -1
- package/icons/material-symbols/eye.svg +1 -1
- package/icons/material-symbols/file-pdf.svg +1 -1
- package/icons/material-symbols/file-text.svg +1 -1
- package/icons/material-symbols/file-video.svg +1 -1
- package/icons/material-symbols/file-zip.svg +1 -1
- package/icons/material-symbols/flower-lotus.svg +1 -1
- package/icons/material-symbols/folder-simple.svg +1 -1
- package/icons/material-symbols/funnel.svg +1 -1
- package/icons/material-symbols/gauge.svg +1 -1
- package/icons/material-symbols/gear.svg +1 -1
- package/icons/material-symbols/github-logo.svg +1 -1
- package/icons/material-symbols/globe.svg +1 -1
- package/icons/material-symbols/google-logo.svg +1 -1
- package/icons/material-symbols/graduation-cap.svg +1 -1
- package/icons/material-symbols/hammer.svg +1 -1
- package/icons/material-symbols/hand-heart.svg +1 -1
- package/icons/material-symbols/handshake.svg +1 -1
- package/icons/material-symbols/hard-drives.svg +1 -1
- package/icons/material-symbols/heart.svg +1 -1
- package/icons/material-symbols/house.svg +1 -1
- package/icons/material-symbols/image-square.svg +1 -1
- package/icons/material-symbols/image.svg +1 -1
- package/icons/material-symbols/info.svg +1 -1
- package/icons/material-symbols/keyboard.svg +1 -1
- package/icons/material-symbols/leaf.svg +1 -1
- package/icons/material-symbols/lifebuoy.svg +1 -1
- package/icons/material-symbols/lightbulb.svg +1 -1
- package/icons/material-symbols/link-break.svg +1 -1
- package/icons/material-symbols/link-simple.svg +1 -1
- package/icons/material-symbols/list-bullets.svg +1 -1
- package/icons/material-symbols/list-checks.svg +1 -1
- package/icons/material-symbols/list-numbers.svg +1 -1
- package/icons/material-symbols/list.svg +1 -1
- package/icons/material-symbols/lock-simple-open.svg +1 -1
- package/icons/material-symbols/lock-simple.svg +1 -1
- package/icons/material-symbols/magnifying-glass.svg +1 -1
- package/icons/material-symbols/map-pin.svg +1 -1
- package/icons/material-symbols/map-trifold.svg +1 -1
- package/icons/material-symbols/medal.svg +1 -1
- package/icons/material-symbols/megaphone.svg +1 -1
- package/icons/material-symbols/minus.svg +1 -1
- package/icons/material-symbols/moon.svg +1 -1
- package/icons/material-symbols/newspaper.svg +1 -1
- package/icons/material-symbols/pack.json +29 -29
- package/icons/material-symbols/paint-brush-broad.svg +1 -1
- package/icons/material-symbols/palette.svg +1 -1
- package/icons/material-symbols/paper-plane-tilt.svg +1 -1
- package/icons/material-symbols/pencil-simple.svg +1 -1
- package/icons/material-symbols/phone.svg +1 -1
- package/icons/material-symbols/play-fill.svg +1 -1
- package/icons/material-symbols/plus.svg +1 -1
- package/icons/material-symbols/prohibit.svg +1 -1
- package/icons/material-symbols/puzzle-piece.svg +1 -1
- package/icons/material-symbols/question.svg +1 -1
- package/icons/material-symbols/quotes.svg +1 -1
- package/icons/material-symbols/rows.svg +1 -1
- package/icons/material-symbols/ruler.svg +1 -1
- package/icons/material-symbols/scan.svg +1 -1
- package/icons/material-symbols/shapes.svg +1 -1
- package/icons/material-symbols/share-network.svg +1 -1
- package/icons/material-symbols/shield-check.svg +1 -1
- package/icons/material-symbols/sidebar-simple.svg +1 -1
- package/icons/material-symbols/sign-out.svg +1 -1
- package/icons/material-symbols/signpost.svg +1 -1
- package/icons/material-symbols/sliders-horizontal.svg +1 -1
- package/icons/material-symbols/smiley.svg +1 -1
- package/icons/material-symbols/sparkle.svg +1 -1
- package/icons/material-symbols/square-half-bottom.svg +1 -1
- package/icons/material-symbols/square.svg +1 -1
- package/icons/material-symbols/squares-four.svg +1 -1
- package/icons/material-symbols/sticker.svg +1 -1
- package/icons/material-symbols/storefront.svg +1 -1
- package/icons/material-symbols/sun.svg +1 -1
- package/icons/material-symbols/swatches.svg +1 -1
- package/icons/material-symbols/tag.svg +1 -1
- package/icons/material-symbols/text-aa.svg +1 -1
- package/icons/material-symbols/text-align-left.svg +1 -1
- package/icons/material-symbols/text-b.svg +1 -1
- package/icons/material-symbols/text-h-one.svg +1 -1
- package/icons/material-symbols/text-h-three.svg +1 -1
- package/icons/material-symbols/text-h-two.svg +1 -1
- package/icons/material-symbols/text-italic.svg +1 -1
- package/icons/material-symbols/text-t.svg +1 -1
- package/icons/material-symbols/ticket.svg +1 -1
- package/icons/material-symbols/toggle-right.svg +1 -1
- package/icons/material-symbols/train.svg +1 -1
- package/icons/material-symbols/trash.svg +1 -1
- package/icons/material-symbols/upload-simple.svg +1 -1
- package/icons/material-symbols/user-circle.svg +1 -1
- package/icons/material-symbols/user.svg +1 -1
- package/icons/material-symbols/users-three.svg +1 -1
- package/icons/material-symbols/users.svg +1 -1
- package/icons/material-symbols/video-camera.svg +1 -1
- package/icons/material-symbols/warning-circle.svg +1 -1
- package/icons/material-symbols/warning.svg +1 -1
- package/icons/material-symbols/wave-sine.svg +1 -1
- package/icons/material-symbols/wheelchair.svg +1 -1
- package/icons/material-symbols/wrench.svg +1 -1
- package/icons/material-symbols/x.svg +1 -1
- package/icons/phosphor/pack.json +8 -8
- package/lib/apps.mjs +142 -139
- package/lib/apps.test.d.mts +1 -0
- package/lib/apps.test.mjs +50 -0
- package/lib/blocks.mjs +90 -90
- package/lib/caseCollisions.d.mts +4 -0
- package/lib/caseCollisions.mjs +62 -0
- package/lib/caseCollisions.test.d.mts +1 -0
- package/lib/caseCollisions.test.mjs +74 -0
- package/lib/colors.ts +86 -86
- package/lib/contactBar.ts +18 -18
- package/lib/contracts.d.mts +15 -0
- package/lib/contracts.mjs +17 -0
- package/lib/cookieCategories.mjs +28 -28
- package/lib/crop.mjs +83 -83
- package/lib/csp.mjs +130 -130
- package/lib/cspSources.mjs +60 -60
- package/lib/dynamic-colors.ts +426 -426
- package/lib/git.mjs +64 -64
- package/lib/hooks.ts +51 -51
- package/lib/inline.ts +20 -20
- package/lib/license-texts/Apache-2.0.txt +190 -190
- package/lib/license-texts/BSD-2-Clause.txt +24 -24
- package/lib/license-texts/BSD-3-Clause.txt +28 -28
- package/lib/license-texts/ISC.txt +15 -15
- package/lib/license-texts/MIT.txt +21 -21
- package/lib/licenses.d.mts +1 -1
- package/lib/licenses.mjs +683 -683
- package/lib/markdown.ts +42 -42
- package/lib/motion-schemes.mjs +5 -5
- package/lib/motion.ts +131 -131
- package/lib/notice.mjs +34 -34
- package/lib/scheduled.mjs +37 -37
- package/lib/snackbar.ts +149 -149
- package/lib/status.mjs +18 -18
- package/lib/storeEntries.d.mts +18 -0
- package/lib/storeEntries.mjs +64 -0
- package/lib/storeEntries.test.d.mts +1 -0
- package/lib/storeEntries.test.mjs +71 -0
- package/lib/svg.mjs +231 -231
- package/lib/text-colors.mjs +43 -43
- package/lib/video-id.mjs +72 -72
- package/lib/video.mjs +91 -91
- package/package.json +136 -131
- package/pages/404.astro +10 -10
- package/pages/[...slug].astro +51 -51
- package/pages/_headers.txt +31 -31
- package/pages/blog/index.astro +10 -10
- package/pages/blog/kategori/[category].astro +18 -18
- package/pages/editor/code-images.json.js +25 -25
- package/pages/editor/index.astro +75 -75
- package/pages/editor/manifest.webmanifest.js +23 -23
- package/pages/editor/sw.js +33 -33
- package/pages/editor/sw.js.js +4 -4
- package/pages/editor/thumbnails.json.js +21 -21
- package/pages/editor/version.json.js +22 -22
- package/pages/headers.js +4 -4
- package/pages/index.astro +10 -10
- package/pages/ny.astro +6 -6
- package/pages/robots.txt.js +3 -3
- package/pages/rss.xml.js +20 -20
- package/scripts/app-screenshots.mjs +164 -164
- package/scripts/app-workers.mjs +6 -6
- package/scripts/bin.mjs +12 -12
- package/scripts/built-site.mjs +134 -99
- package/scripts/check-consent.mjs +113 -113
- package/scripts/check-content.mjs +151 -149
- package/scripts/check-demo.mjs +24 -24
- package/scripts/check-store.mjs +160 -0
- package/scripts/check-themes.mjs +45 -45
- package/scripts/check-worker.mjs +569 -569
- package/scripts/compare-html.mjs +81 -81
- package/scripts/declarations.mjs +10 -0
- package/scripts/declarations.test.mjs +32 -0
- package/scripts/demo-site.mjs +42 -42
- package/scripts/editor-icons.mjs +56 -56
- package/scripts/editor-roundtrip.mjs +134 -134
- package/scripts/editor-screens.mjs +101 -101
- package/scripts/git-env.mjs +9 -9
- package/scripts/icon-packs.mjs +151 -151
- package/scripts/link-counts.mjs +22 -22
- package/scripts/page-colors.mjs +42 -42
- package/scripts/releases.mjs +80 -80
- package/scripts/responsive-images.mjs +94 -94
- package/scripts/scheduled-list.mjs +15 -15
- package/scripts/theme-screenshots.mjs +88 -88
- package/scripts/types.mjs +17 -21
- package/scripts/video-thumbnails.mjs +89 -89
- package/scripts/worker-modules.mjs +34 -34
- package/site/appCookies.mjs +74 -74
- package/site/apps.ts +21 -21
- package/site/autolinks.mjs +200 -200
- package/site/blockScripts.ts +31 -31
- package/site/categories.ts +16 -16
- package/site/consent.ts +26 -26
- package/site/content.config.ts +84 -84
- package/site/content.ts +104 -104
- package/site/cookieList.ts +17 -17
- package/site/defineSite.d.mts +2 -14
- package/site/defineSite.mjs +131 -136
- package/site/directives/interact.mjs +31 -31
- package/site/editor-version.mjs +26 -26
- package/site/fill.ts +13 -13
- package/site/format.ts +11 -11
- package/site/home.ts +66 -66
- package/site/iconPacks.mjs +43 -43
- package/site/icons.mjs +605 -605
- package/site/images.mjs +157 -157
- package/site/motion.ts +13 -13
- package/site/noindex.mjs +21 -21
- package/site/pageColors.ts +110 -110
- package/site/popups.ts +98 -98
- package/site/schema.ts +189 -189
- package/site/sections.ts +3 -3
- package/site/seo.ts +28 -28
- package/site/site.ts +76 -76
- package/site/siteConfig.mjs +8 -8
- package/site/siteCsp.mjs +75 -75
- package/site/siteModules.mjs +27 -27
- package/site/standardPages.ts +59 -59
- package/site/storeTheme.d.mts +6 -0
- package/site/storeTheme.mjs +29 -0
- package/site/storeTheme.test.d.mts +1 -0
- package/site/storeTheme.test.mjs +53 -0
- package/site/testimonials.ts +48 -48
- package/site/text.ts +43 -43
- package/site/theme.mjs +483 -472
- package/site/tracking.client.ts +225 -225
- package/site/tracking.ts +9 -9
- package/src/ActionParts.tsx +205 -205
- package/src/Advanced.tsx +152 -152
- package/src/App.tsx +901 -904
- package/src/AppList.tsx +1362 -1345
- package/src/BlockDialog.tsx +360 -360
- package/src/BlockParts.tsx +652 -652
- package/src/BlockSettings.tsx +533 -533
- package/src/BrandForm.tsx +164 -164
- package/src/Colors.tsx +476 -476
- package/src/CommunicationParts.tsx +199 -199
- package/src/CompanyForm.tsx +209 -209
- package/src/Consents.tsx +175 -175
- package/src/ContainmentParts.tsx +185 -185
- package/src/Crop.tsx +152 -152
- package/src/DataForm.tsx +434 -434
- package/src/Deleted.tsx +177 -177
- package/src/EntryForm.tsx +740 -740
- package/src/FileView.tsx +30 -30
- package/src/FormFrame.tsx +237 -237
- package/src/Keywords.tsx +225 -225
- package/src/Library.tsx +1563 -1563
- package/src/Licenses.tsx +336 -336
- package/src/LinkSheet.tsx +138 -138
- package/src/MarkdownEditor.tsx +1075 -1075
- package/src/Media.tsx +677 -677
- package/src/NavigationParts.tsx +350 -350
- package/src/NavigationRestParts.tsx +247 -247
- package/src/Notifications.tsx +59 -59
- package/src/PagePicker.tsx +136 -136
- package/src/Parts.tsx +991 -991
- package/src/PartsShown.tsx +168 -168
- package/src/PickerParts.tsx +183 -183
- package/src/Redirects.tsx +450 -450
- package/src/Screen.tsx +184 -184
- package/src/SectionsField.tsx +65 -65
- package/src/SelectionParts.tsx +134 -134
- package/src/SeoScores.tsx +184 -184
- package/src/Sheet.tsx +35 -35
- package/src/ThemeStore.tsx +376 -376
- package/src/Tokens.tsx +346 -346
- package/src/Versions.tsx +214 -214
- package/src/addresses.ts +75 -75
- package/src/allIcons.ts +7 -7
- package/src/appFiles.ts +29 -29
- package/src/apps.ts +281 -281
- package/src/ask.tsx +123 -123
- package/src/blocks.ts +251 -251
- package/src/brand.ts +153 -153
- package/src/cache.ts +42 -42
- package/src/check.ts +285 -285
- package/src/checkSite.ts +256 -256
- package/src/{consents.ts → consentData.ts} +26 -26
- package/src/cookieList.ts +70 -70
- package/src/countries.ts +59 -59
- package/src/deploy.ts +155 -155
- package/src/editor.css +602 -602
- package/src/examples.ts +85 -85
- package/src/fields.tsx +942 -942
- package/src/frontmatter.mjs +42 -42
- package/src/github.ts +376 -376
- package/src/i18n/da-DK/advanced.ts +28 -28
- package/src/i18n/da-DK/app.ts +71 -71
- package/src/i18n/da-DK/apps.ts +90 -90
- package/src/i18n/da-DK/blockSettings.ts +38 -38
- package/src/i18n/da-DK/blocks.ts +408 -408
- package/src/i18n/da-DK/check.ts +25 -25
- package/src/i18n/da-DK/colors.ts +64 -64
- package/src/i18n/da-DK/common.ts +118 -118
- package/src/i18n/da-DK/company.ts +24 -24
- package/src/i18n/da-DK/consents.ts +23 -23
- package/src/i18n/da-DK/forms.ts +116 -116
- package/src/i18n/da-DK/history.ts +35 -35
- package/src/i18n/da-DK/index.ts +49 -49
- package/src/i18n/da-DK/keywords.ts +19 -19
- package/src/i18n/da-DK/library.ts +135 -135
- package/src/i18n/da-DK/licenses.ts +25 -25
- package/src/i18n/da-DK/media.ts +79 -79
- package/src/i18n/da-DK/parts.ts +696 -696
- package/src/i18n/da-DK/preview.ts +13 -13
- package/src/i18n/da-DK/redirects.ts +51 -51
- package/src/i18n/da-DK/seo.ts +20 -20
- package/src/i18n/da-DK/text.ts +35 -35
- package/src/i18n/da-DK/theme.ts +41 -41
- package/src/i18n/en-US/advanced.ts +32 -32
- package/src/i18n/en-US/app.ts +84 -84
- package/src/i18n/en-US/apps.ts +134 -134
- package/src/i18n/en-US/blockSettings.ts +48 -48
- package/src/i18n/en-US/blocks.ts +441 -441
- package/src/i18n/en-US/check.ts +31 -31
- package/src/i18n/en-US/colors.ts +82 -82
- package/src/i18n/en-US/common.ts +144 -144
- package/src/i18n/en-US/company.ts +25 -25
- package/src/i18n/en-US/consents.ts +25 -25
- package/src/i18n/en-US/forms.ts +145 -145
- package/src/i18n/en-US/history.ts +43 -43
- package/src/i18n/en-US/index.ts +51 -51
- package/src/i18n/en-US/keywords.ts +24 -24
- package/src/i18n/en-US/library.ts +176 -176
- package/src/i18n/en-US/licenses.ts +36 -36
- package/src/i18n/en-US/media.ts +80 -80
- package/src/i18n/en-US/parts.ts +718 -718
- package/src/i18n/en-US/preview.ts +15 -15
- package/src/i18n/en-US/redirects.ts +66 -66
- package/src/i18n/en-US/seo.ts +26 -26
- package/src/i18n/en-US/text.ts +41 -41
- package/src/i18n/en-US/theme.ts +41 -41
- package/src/i18n/index.ts +124 -124
- package/src/icon.tsx +160 -160
- package/src/iconPacks.ts +89 -89
- package/src/images.ts +163 -163
- package/src/{licenses.ts → licenseData.ts} +79 -79
- package/src/markdown.mjs +204 -204
- package/src/nav.ts +68 -68
- package/src/notFound.ts +28 -28
- package/src/{notifications.ts → notificationData.ts} +223 -223
- package/src/pagePreview.tsx +204 -204
- package/src/r2Caching.ts +55 -55
- package/src/{redirects.ts → redirectData.ts} +149 -149
- package/src/registry.tsx +188 -188
- package/src/schema.ts +417 -417
- package/src/sections.mjs +303 -303
- package/src/seo.ts +333 -333
- package/src/shared.ts +44 -44
- package/src/sidebar.ts +31 -31
- package/src/site.ts +317 -317
- package/src/standard/Block.astro +19 -19
- package/src/standard/BlockSite.astro +18 -18
- package/src/standard/accordion/index.tsx +47 -47
- package/src/standard/accordion/load.ts +23 -23
- package/src/standard/accordion/shared.ts +15 -15
- package/src/standard/accordion/view.ts +32 -32
- package/src/standard/buttons/fields.ts +98 -98
- package/src/standard/buttons/index.tsx +23 -23
- package/src/standard/buttons/load.ts +34 -34
- package/src/standard/buttons/shared.ts +12 -12
- package/src/standard/buttons/view.ts +30 -30
- package/src/standard/cards/index.tsx +71 -71
- package/src/standard/cards/load.ts +17 -17
- package/src/standard/cards/shared.ts +27 -27
- package/src/standard/cards/view.ts +29 -29
- package/src/standard/checklist/index.tsx +27 -27
- package/src/standard/checklist/load.ts +5 -5
- package/src/standard/checklist/view.ts +13 -13
- package/src/standard/cookies/index.tsx +17 -17
- package/src/standard/cookies/list.ts +56 -56
- package/src/standard/cookies/load.ts +11 -11
- package/src/standard/cookies/shared.ts +20 -20
- package/src/standard/cookies/view.ts +28 -28
- package/src/standard/faq/index.tsx +29 -29
- package/src/standard/faq/load.ts +14 -14
- package/src/standard/faq/view.ts +21 -21
- package/src/standard/head.ts +23 -23
- package/src/standard/hero/fields.ts +48 -48
- package/src/standard/hero/index.tsx +57 -57
- package/src/standard/hero/load.ts +23 -23
- package/src/standard/hero/view.ts +38 -38
- package/src/standard/links/index.tsx +41 -41
- package/src/standard/links/load.ts +17 -17
- package/src/standard/links/view.ts +25 -25
- package/src/standard/list/index.tsx +50 -50
- package/src/standard/list/load.ts +5 -5
- package/src/standard/list/view.ts +18 -18
- package/src/standard/load.ts +7 -7
- package/src/standard/notice/index.tsx +30 -30
- package/src/standard/notice/load.ts +16 -16
- package/src/standard/notice/view.ts +10 -10
- package/src/standard/points/index.tsx +42 -42
- package/src/standard/points/load.ts +5 -5
- package/src/standard/points/view.ts +12 -12
- package/src/standard/posts/index.tsx +132 -132
- package/src/standard/posts/load.ts +36 -36
- package/src/standard/posts/shared.ts +21 -21
- package/src/standard/posts/view.ts +63 -63
- package/src/standard/pricecards/index.tsx +57 -57
- package/src/standard/pricecards/load.ts +11 -11
- package/src/standard/pricecards/view.ts +50 -50
- package/src/standard/sharedTexts.ts +6 -6
- package/src/standard/site.ts +124 -124
- package/src/standard/siteLooks.ts +19 -19
- package/src/standard/sites.ts +13 -13
- package/src/standard/steps/index.tsx +28 -28
- package/src/standard/steps/load.ts +5 -5
- package/src/standard/steps/view.ts +11 -11
- package/src/standard/testimonials/index.tsx +87 -87
- package/src/standard/testimonials/list.ts +43 -43
- package/src/standard/testimonials/load.ts +58 -58
- package/src/standard/testimonials/shared.ts +13 -13
- package/src/standard/testimonials/view.ts +76 -76
- package/src/standard/themeBlocks.ts +13 -13
- package/src/standard/video/index.tsx +23 -23
- package/src/standard/video/load.ts +10 -10
- package/src/standard/video/view.ts +42 -42
- package/src/standard/view.tsx +105 -105
- package/src/standard/views.ts +37 -37
- package/src/store.ts +479 -499
- package/src/theme.ts +90 -90
- package/src/themeUi.ts +97 -97
- package/src/themes.ts +91 -91
- package/src/ui.tsx +3402 -3402
- package/src/virtual.d.ts +5 -5
- package/src/when.ts +22 -22
- package/starter/.githooks/pre-push +4 -4
- package/starter/.nvmrc +1 -1
- package/starter/.prettierignore +11 -11
- package/starter/.prettierrc.json +7 -7
- package/starter/README.md +27 -26
- package/starter/astro.config.mjs +5 -5
- package/starter/package.json +67 -67
- package/starter/public/_redirects +1 -1
- package/starter/public/favicon.svg +1 -1
- package/starter/public/logo.svg +1 -1
- package/starter/src/content/pages/blog.md +8 -8
- package/starter/src/content/pages/forside.md +9 -9
- package/starter/src/content/pages/kontakt.md +7 -7
- package/starter/src/content/pages/privatlivspolitik.md +9 -9
- package/starter/src/content/pages/siden-findes-ikke.md +7 -7
- package/starter/src/content.config.ts +2 -2
- package/starter/src/data/apps.json +1 -1
- package/starter/src/data/block-settings.json +3 -3
- package/starter/src/data/blocks.json +1 -1
- package/starter/src/data/booking.json +6 -6
- package/starter/src/data/colors.json +70 -70
- package/starter/src/data/contact.json +8 -8
- package/starter/src/data/cookies.json +21 -21
- package/starter/src/data/csp.json +1 -1
- package/starter/src/data/footer.json +15 -15
- package/starter/src/data/internal-links.json +4 -4
- package/starter/src/data/menu.json +4 -4
- package/starter/src/data/mobile-menu.json +4 -4
- package/starter/src/data/old-addresses.json +1 -1
- package/starter/src/data/redirects.json +1 -1
- package/starter/src/data/standard-pages.json +8 -8
- package/starter/src/data/theme.json +1 -1
- package/starter/src/env.d.ts +2 -2
- package/starter/src/site/config.ts +13 -13
- package/starter/src/site/worker.js +14 -14
- package/starter/tsconfig.json +17 -17
- package/starter/worker/apps.js +6 -6
- package/starter/wrangler.jsonc +39 -39
- package/theme/LICENSE +21 -21
- package/theme/blocks/ArrowLink.tsx +14 -14
- package/theme/blocks/BlockHead.tsx +26 -26
- package/theme/blocks/Panel.tsx +32 -32
- package/theme/blocks/Person.tsx +26 -26
- package/theme/blocks/accordion/PageRow.tsx +25 -25
- package/theme/blocks/accordion/View.tsx +17 -17
- package/theme/blocks/buttons/Buttons.tsx +28 -28
- package/theme/blocks/buttons/View.tsx +12 -12
- package/theme/blocks/cards/LinkCards.tsx +72 -72
- package/theme/blocks/cards/View.tsx +20 -20
- package/theme/blocks/checklist/Checks.tsx +15 -15
- package/theme/blocks/checklist/View.tsx +14 -14
- package/theme/blocks/cookies/View.tsx +36 -36
- package/theme/blocks/faq/Accordion.tsx +34 -34
- package/theme/blocks/faq/View.tsx +16 -16
- package/theme/blocks/faq/script.ts +56 -56
- package/theme/blocks/hero/View.tsx +44 -44
- package/theme/blocks/links/LinkGroups.tsx +24 -24
- package/theme/blocks/links/View.tsx +17 -17
- package/theme/blocks/list/Rows.tsx +24 -24
- package/theme/blocks/list/View.tsx +14 -14
- package/theme/blocks/notice/View.tsx +13 -13
- package/theme/blocks/points/PointList.tsx +34 -34
- package/theme/blocks/points/View.tsx +14 -14
- package/theme/blocks/posts/View.tsx +26 -26
- package/theme/blocks/pricecards/View.tsx +40 -40
- package/theme/blocks/steps/StepList.tsx +23 -23
- package/theme/blocks/steps/View.tsx +14 -14
- package/theme/blocks/testimonials/List.tsx +46 -46
- package/theme/blocks/testimonials/Slider.tsx +44 -44
- package/theme/blocks/testimonials/Testimonial.tsx +124 -124
- package/theme/blocks/testimonials/View.tsx +21 -21
- package/theme/blocks/testimonials/script.ts +52 -52
- package/theme/blocks/video/View.tsx +41 -41
- package/theme/components/ActionBar.astro +63 -63
- package/theme/components/AppSlot.astro +21 -21
- package/theme/components/ArrowLink.tsx +21 -21
- package/theme/components/BlogIndex.astro +48 -48
- package/theme/components/BlogPosts.astro +18 -18
- package/theme/components/BlogPosts.tsx +45 -45
- package/theme/components/BookButton.tsx +22 -22
- package/theme/components/Container.astro +11 -11
- package/theme/components/CookieConsent.astro +121 -121
- package/theme/components/EndBlock.astro +21 -21
- package/theme/components/FontPreload.astro +6 -6
- package/theme/components/Footer.astro +85 -85
- package/theme/components/Header.astro +186 -186
- package/theme/components/Icon.astro +16 -16
- package/theme/components/Img.astro +29 -29
- package/theme/components/Img.tsx +33 -33
- package/theme/components/Inline.astro +11 -11
- package/theme/components/Logo.astro +23 -23
- package/theme/components/LogoMark.astro +10 -10
- package/theme/components/Markdown.astro +17 -17
- package/theme/components/MobileMenu.tsx +224 -224
- package/theme/components/MobileNav.astro +33 -33
- package/theme/components/PageHeader.astro +22 -22
- package/theme/components/PageSection.astro +24 -24
- package/theme/components/PhoneButton.tsx +11 -11
- package/theme/components/Popup.astro +145 -145
- package/theme/components/PopupButton.tsx +24 -24
- package/theme/components/PopupView.tsx +48 -48
- package/theme/components/PostList.tsx +58 -58
- package/theme/components/PostMeta.tsx +17 -17
- package/theme/components/RichText.astro +28 -28
- package/theme/components/Section.astro +29 -29
- package/theme/components/SectionHeading.tsx +8 -8
- package/theme/components/TextSection.astro +16 -16
- package/theme/components/home/PageBlock.astro +19 -19
- package/theme/components/home/Text.astro +13 -13
- package/theme/components/loadPopup.ts +22 -22
- package/theme/components/loadPosts.ts +16 -16
- package/theme/components/posts.ts +15 -15
- package/theme/editor/looks.mjs +7 -7
- package/theme/editor/previews.tsx +56 -56
- package/theme/layouts/Base.astro +273 -273
- package/theme/layouts/PageLayout.astro +126 -126
- package/theme/layouts/PostLayout.astro +137 -137
- package/theme/scripts/motion.ts +29 -29
- package/theme/styles/base.css +320 -320
- package/theme/styles/blocks.css +1808 -1808
- package/theme/styles/components.css +206 -206
- package/theme/styles/global.css +1302 -1302
- package/theme/styles/ui.css +6544 -6544
- package/theme/templates/Blog.astro +38 -38
- package/theme/templates/Category.astro +19 -19
- package/theme/templates/Home.astro +36 -36
- package/theme/templates/New.astro +68 -68
- package/theme/templates/NotFound.astro +117 -117
- package/theme/theme.json +28 -28
- package/theme/ui/Badge.tsx +45 -45
- package/theme/ui/BottomSheet.tsx +148 -148
- package/theme/ui/Button.tsx +79 -79
- package/theme/ui/ButtonGroup.tsx +31 -31
- package/theme/ui/Card.tsx +45 -45
- package/theme/ui/Carousel.tsx +124 -124
- package/theme/ui/Checkbox.tsx +59 -59
- package/theme/ui/Chip.tsx +101 -101
- package/theme/ui/ChipSet.tsx +27 -27
- package/theme/ui/DatePicker.tsx +149 -149
- package/theme/ui/DatePickerContainer.tsx +316 -316
- package/theme/ui/Dialog.tsx +100 -100
- package/theme/ui/Divider.tsx +27 -27
- package/theme/ui/ExposedDropdownMenu.tsx +77 -77
- package/theme/ui/Fab.tsx +88 -88
- package/theme/ui/FabMenu.tsx +67 -67
- package/theme/ui/IconButton.tsx +78 -78
- package/theme/ui/List.tsx +287 -287
- package/theme/ui/LoadingIndicator.tsx +29 -29
- package/theme/ui/Menu.tsx +278 -278
- package/theme/ui/NavigationBar.tsx +62 -62
- package/theme/ui/NavigationDrawer.tsx +80 -80
- package/theme/ui/NavigationRail.tsx +154 -154
- package/theme/ui/ProgressIndicator.tsx +162 -162
- package/theme/ui/RadioButton.tsx +50 -50
- package/theme/ui/Search.tsx +129 -129
- package/theme/ui/SegmentedButton.tsx +49 -49
- package/theme/ui/SideSheet.tsx +54 -54
- package/theme/ui/Slider.tsx +155 -155
- package/theme/ui/Snackbar.tsx +67 -67
- package/theme/ui/SplitButton.tsx +67 -67
- package/theme/ui/Switch.tsx +60 -60
- package/theme/ui/Tabs.tsx +114 -114
- package/theme/ui/TextField.tsx +278 -278
- package/theme/ui/TimePicker.tsx +128 -128
- package/theme/ui/TimePickerContainer.tsx +234 -234
- package/theme/ui/Toolbar.tsx +67 -67
- package/theme/ui/Tooltip.tsx +58 -58
- package/theme/ui/TopAppBar.tsx +77 -77
- package/theme/ui/bottomSheet.script.ts +8 -8
- package/theme/ui/{bottomSheet.ts → bottomSheetControl.ts} +211 -211
- package/theme/ui/carousel.script.ts +28 -28
- package/theme/ui/carouselLayout.ts +229 -229
- package/theme/ui/checkbox.script.ts +8 -8
- package/theme/ui/datePicker.script.ts +302 -302
- package/theme/ui/dates.ts +185 -185
- package/theme/ui/{dialog.ts → dialogControl.ts} +48 -48
- package/theme/ui/dropdownMenu.script.ts +166 -166
- package/theme/ui/fabMenu.script.ts +57 -57
- package/theme/ui/navigationRail.script.ts +47 -47
- package/theme/ui/ripple.script.ts +159 -159
- package/theme/ui/search.script.ts +92 -92
- package/theme/ui/{sideSheet.ts → sideSheetControl.ts} +48 -48
- package/theme/ui/slider.script.ts +12 -12
- package/theme/ui/sliderUpdate.ts +52 -52
- package/theme/ui/snackbar.script.ts +16 -16
- package/theme/ui/splitButton.script.ts +63 -63
- package/theme/ui/tabs.script.ts +48 -48
- package/theme/ui/textField.script.ts +17 -17
- package/theme/ui/textFieldUpdate.ts +44 -44
- package/theme/ui/timePicker.script.ts +248 -248
- package/theme/ui/toolbar.script.ts +43 -43
- package/theme/ui/tooltip.script.ts +68 -68
- package/worker/consent.js +141 -141
- package/worker/editor-github.js +167 -167
- package/worker/editor-host.js +74 -74
- package/worker/files.js +401 -401
- package/worker/github.js +36 -36
- package/worker/index.js +188 -184
- package/worker/not-found.js +97 -97
- package/worker/oauth.js +95 -95
- package/worker/publish.js +52 -52
- package/worker/push.js +270 -270
- package/worker/r2-status.js +50 -50
- package/worker/session.js +58 -58
- package/worker/store.js +46 -0
package/src/editor.css
CHANGED
|
@@ -1,602 +1,602 @@
|
|
|
1
|
-
/* The editor's parts are the theme's UI parts (ui.tsx), in the theme's design; its own parts take the theme's variables
|
|
2
|
-
(--block-radius, --block-radius-small, --block-shadow). Only what is the editor's alone is here. Low specificity
|
|
3
|
-
(:where), so a theme's :root wins. */
|
|
4
|
-
:where(:root) {
|
|
5
|
-
/* How a check went (CheckList: the SEO rating), as PageSpeed shows it: the mark before a check that is fine and one
|
|
6
|
-
that can be done better, and the score's ring (from 90 good, from 50 average, else bad) with its number and the
|
|
7
|
-
light circle in it; the same in every theme. */
|
|
8
|
-
--editor-status-good: #0cce6b;
|
|
9
|
-
--editor-status-good-text: #008800;
|
|
10
|
-
--editor-status-good-surface: color-mix(in srgb, #0cce6b 10%, var(--surface));
|
|
11
|
-
--editor-status-average: #ffa400;
|
|
12
|
-
--editor-status-average-text: #c33300;
|
|
13
|
-
--editor-status-average-surface: color-mix(in srgb, #ffa400 10%, var(--surface));
|
|
14
|
-
--editor-status-bad: #ff4e42;
|
|
15
|
-
--editor-status-bad-text: #cc0000;
|
|
16
|
-
--editor-status-bad-surface: color-mix(in srgb, #ff4e42 10%, var(--surface));
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/* In dark mode the score's number in the light colours, which are read on the dark. */
|
|
20
|
-
@media (prefers-color-scheme: dark) {
|
|
21
|
-
:where(:root:not([data-theme='light'])) {
|
|
22
|
-
--editor-status-good-text: var(--editor-status-good);
|
|
23
|
-
--editor-status-average-text: var(--editor-status-average);
|
|
24
|
-
--editor-status-bad-text: var(--editor-status-bad);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
:where(:root[data-theme='dark']) {
|
|
28
|
-
--editor-status-good-text: var(--editor-status-good);
|
|
29
|
-
--editor-status-average-text: var(--editor-status-average);
|
|
30
|
-
--editor-status-bad-text: var(--editor-status-bad);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/* The text field (MarkdownEditor.tsx). The rest of the editor uses the site's Tailwind classes. */
|
|
34
|
-
.editor-text .ProseMirror {
|
|
35
|
-
min-height: 50vh;
|
|
36
|
-
outline: none;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/* A text in a field (a section of the front page) is short. */
|
|
40
|
-
.editor-text-short .ProseMirror {
|
|
41
|
-
min-height: 8rem;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/* ProseMirror puts invisible helpers around a picture (empty images and a line break). Next to a
|
|
45
|
-
full-width picture each gets a line of its own, which shows as empty space; hide them there. */
|
|
46
|
-
.editor-text p:has(> .site-picture) > :is(.ProseMirror-separator, .ProseMirror-trailingBreak) {
|
|
47
|
-
display: none !important;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/* Milkdown puts a paragraph in every list item; on the site, short lists have none. */
|
|
51
|
-
.editor-text li > p {
|
|
52
|
-
margin-block: 0;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/* HTML in a line of text is kept as it is but cannot be edited here (on a line of its own it is a
|
|
56
|
-
block, HTML in markdown.mjs). */
|
|
57
|
-
.editor-text [data-type='html'] {
|
|
58
|
-
display: inline-block;
|
|
59
|
-
max-width: 100%;
|
|
60
|
-
overflow-wrap: anywhere;
|
|
61
|
-
border-radius: 0.5rem;
|
|
62
|
-
background: var(--tint);
|
|
63
|
-
padding: 0 0.4em;
|
|
64
|
-
font-family: ui-monospace, monospace;
|
|
65
|
-
font-size: 0.8em;
|
|
66
|
-
color: var(--muted);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/* The bar with "Gem" (FormFrame.tsx) slides up when something has been changed; the messages
|
|
70
|
-
(App.tsx) then go above it. */
|
|
71
|
-
.editor-save-bar {
|
|
72
|
-
animation: editor-rise var(--motion-spatial-fast);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
@keyframes editor-rise {
|
|
76
|
-
from {
|
|
77
|
-
transform: translateY(100%);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
@media (prefers-reduced-motion: reduce) {
|
|
82
|
-
.editor-save-bar {
|
|
83
|
-
animation: none;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/* An element's name as the theme's plain tooltip (useTooltip in ui.tsx): a popover over everything, placed by the
|
|
88
|
-
script under or over the element; its look is the theme's .tooltip-plain. */
|
|
89
|
-
.editor-tooltip {
|
|
90
|
-
position: fixed;
|
|
91
|
-
inset: auto;
|
|
92
|
-
margin: 0;
|
|
93
|
-
border: 0;
|
|
94
|
-
width: max-content;
|
|
95
|
-
pointer-events: none;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/* The field that keeps a form from being saved (WrongField in fields.tsx): the edge of the theme's text field
|
|
99
|
-
(.text-field-input, its edge a box-shadow) in the accent colour, flashing gently three times; around the whole field
|
|
100
|
-
when it has no box of its own (a picture, icons, a switcher). It stays until the next try or a change. */
|
|
101
|
-
.editor-wrong .text-field-input {
|
|
102
|
-
box-shadow:
|
|
103
|
-
inset 0 0 0 2px var(--accent),
|
|
104
|
-
0 0 0 3px color-mix(in srgb, var(--accent) 25%, transparent);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
.editor-wrong:not(:has(.text-field-input)) {
|
|
108
|
-
border-radius: 1rem;
|
|
109
|
-
outline: 2px solid var(--accent);
|
|
110
|
-
outline-offset: 6px;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
@media (prefers-reduced-motion: no-preference) {
|
|
114
|
-
.editor-wrong .text-field-input {
|
|
115
|
-
animation: editor-flash 0.8s ease-in-out 3;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
.editor-wrong:not(:has(.text-field-input)) {
|
|
119
|
-
animation: editor-flash-around 0.8s ease-in-out 3;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
@keyframes editor-flash {
|
|
124
|
-
50% {
|
|
125
|
-
box-shadow:
|
|
126
|
-
inset 0 0 0 1px var(--line),
|
|
127
|
-
0 0 0 3px transparent;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
@keyframes editor-flash-around {
|
|
132
|
-
50% {
|
|
133
|
-
outline-color: transparent;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/* A sheet that is dragged up by its top on a phone (SheetTitle in ui.tsx) is as tall as the screen,
|
|
138
|
-
below the clock, or as tall as what is in it, if that is less. */
|
|
139
|
-
@media not (min-width: 48rem) {
|
|
140
|
-
.editor-sheet[data-tall] {
|
|
141
|
-
max-height: calc(100dvh - env(safe-area-inset-top));
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/* A little motion, so the editor feels like an app: a sheet slides up from the bottom (on a
|
|
146
|
-
computer, where it is a dialog in the middle, it fades in and grows a little) and the page behind
|
|
147
|
-
it darkens (a question, ask.tsx, comes up as the theme's dialog does); a new screen fades in; a message rises up; an item of a
|
|
148
|
-
list that is opened shows its fields softly; a picture in Filer fades in when it has loaded and
|
|
149
|
-
grows a little under the mouse; a button's colours change softly (pressed, it ripples: the theme's .ripple). Only when
|
|
150
|
-
the phone or computer does not ask for less motion. */
|
|
151
|
-
@media (prefers-reduced-motion: no-preference) {
|
|
152
|
-
.editor-sheet[open] {
|
|
153
|
-
animation: editor-sheet-in var(--motion-spatial);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/* A modal navigation drawer (ModalNavigationDrawer in ui.tsx) slides in from the right edge. */
|
|
157
|
-
.editor-drawer[open] {
|
|
158
|
-
animation: editor-drawer-in var(--motion-spatial);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
:is(.editor-sheet, .editor-drawer)[open]::backdrop {
|
|
162
|
-
animation: editor-fade var(--motion-effects);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
@media (min-width: 48rem) {
|
|
166
|
-
.editor-sheet[open] {
|
|
167
|
-
animation: editor-pop var(--motion-spatial-fast);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
.editor-screen {
|
|
172
|
-
animation: editor-enter var(--motion-spatial);
|
|
173
|
-
/* A chip set that scrolls reaches out to the screen's edges: the screen's gutter (px-4, md:px-6 in Screen.tsx). */
|
|
174
|
-
--chip-set-bleed: 1rem;
|
|
175
|
-
}
|
|
176
|
-
@media (min-width: 48rem) {
|
|
177
|
-
.editor-screen {
|
|
178
|
-
--chip-set-bleed: 1.5rem;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
.editor-reveal {
|
|
183
|
-
animation: editor-enter var(--motion-spatial-fast);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
.editor-fade-in {
|
|
187
|
-
opacity: 0;
|
|
188
|
-
transition:
|
|
189
|
-
opacity var(--motion-effects),
|
|
190
|
-
scale var(--motion-spatial);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
.editor-fade-in[data-loaded] {
|
|
194
|
-
opacity: 1;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
/* In the base layer, so a Tailwind class on the button itself still decides. */
|
|
198
|
-
@layer base {
|
|
199
|
-
:is(button, a):not(:disabled, .ProseMirror *) {
|
|
200
|
-
transition:
|
|
201
|
-
background-color var(--motion-effects-fast),
|
|
202
|
-
color var(--motion-effects-fast);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
@keyframes editor-sheet-in {
|
|
208
|
-
from {
|
|
209
|
-
transform: translateY(100%);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
@keyframes editor-drawer-in {
|
|
214
|
-
from {
|
|
215
|
-
transform: translateX(100%);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
@keyframes editor-pop {
|
|
220
|
-
from {
|
|
221
|
-
opacity: 0;
|
|
222
|
-
transform: scale(0.96);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
@keyframes editor-fade {
|
|
227
|
-
from {
|
|
228
|
-
opacity: 0;
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
@keyframes editor-enter {
|
|
233
|
-
from {
|
|
234
|
-
opacity: 0;
|
|
235
|
-
transform: translateY(0.5rem);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
:root:has(.editor-save-bar) .snackbar-stack {
|
|
240
|
-
bottom: calc(5.5rem + env(safe-area-inset-bottom));
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
/* On a computer, the messages are in the middle of the content, next to the sidebar (App.tsx). */
|
|
244
|
-
@media (width >= 48rem) {
|
|
245
|
-
:root .snackbar-stack {
|
|
246
|
-
padding-left: 4.5rem;
|
|
247
|
-
}
|
|
248
|
-
:root[data-sidebar='open'] .snackbar-stack {
|
|
249
|
-
padding-left: 16rem;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
/* Like an app: no grey flash when tapping links and buttons on a phone, and no zoom on a double tap.
|
|
254
|
-
Nothing sticks out at the side: on Android, anything wider than the screen, even for a moment while
|
|
255
|
-
the page opens, makes Chrome lay the whole page out wider than the screen, and as zooming is off
|
|
256
|
-
(pages/editor/index.astro) it then stays cut off on the right. */
|
|
257
|
-
html,
|
|
258
|
-
body {
|
|
259
|
-
overflow-x: clip;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
html {
|
|
263
|
-
-webkit-tap-highlight-color: transparent;
|
|
264
|
-
touch-action: manipulation;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
/* A block of the site in the text (Book en tid, Udtalelser …; MarkdownEditor.tsx): the block as it
|
|
268
|
-
looks on the site (src/apps/<app>/blocks/, previews.tsx) in a thin, dashed square frame, not text. Tapping it opens a row
|
|
269
|
-
of icons on it with what can be done with it. The frame stands out a little to the sides, so the block
|
|
270
|
-
lines up with the text. A picture in the text is a card like it (in its paragraph). */
|
|
271
|
-
.editor-text .site-block {
|
|
272
|
-
position: relative;
|
|
273
|
-
margin-block: 1.5em;
|
|
274
|
-
user-select: none;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
.editor-text .site-picture {
|
|
278
|
-
display: block;
|
|
279
|
-
margin-block: 0;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
.editor-text .site-picture :is(img, .picture-crop) {
|
|
283
|
-
margin-block: 0;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
.editor-text .site-block-card {
|
|
287
|
-
display: block;
|
|
288
|
-
width: calc(100% + 1.25rem);
|
|
289
|
-
margin-inline: -0.625rem;
|
|
290
|
-
position: relative;
|
|
291
|
-
border-radius: 0;
|
|
292
|
-
border: 1.5px dashed color-mix(in srgb, var(--muted) 45%, transparent);
|
|
293
|
-
padding: 0.5rem;
|
|
294
|
-
text-align: left;
|
|
295
|
-
cursor: pointer;
|
|
296
|
-
transition: border-color var(--motion-effects);
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
.editor-text .site-block-card:hover,
|
|
300
|
-
.editor-text .site-block-card[aria-expanded='true'] {
|
|
301
|
-
border-color: var(--accent);
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
.editor-text .site-block-card:focus-visible {
|
|
305
|
-
outline: 2px solid var(--accent);
|
|
306
|
-
outline-offset: 2px;
|
|
307
|
-
border-radius: 0;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
.editor-text .site-block-hidden-badge {
|
|
311
|
-
position: absolute;
|
|
312
|
-
z-index: 1;
|
|
313
|
-
top: 1rem;
|
|
314
|
-
right: 1rem;
|
|
315
|
-
display: grid;
|
|
316
|
-
width: 2rem;
|
|
317
|
-
height: 2rem;
|
|
318
|
-
place-items: center;
|
|
319
|
-
border-radius: 9999px;
|
|
320
|
-
background: var(--ink);
|
|
321
|
-
color: var(--bg);
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
/* The block's menu: a row of icons on the top edge of the frame, in the middle. */
|
|
325
|
-
.editor-text .site-block-menu {
|
|
326
|
-
position: absolute;
|
|
327
|
-
z-index: 15;
|
|
328
|
-
top: -1.4rem;
|
|
329
|
-
left: 50%;
|
|
330
|
-
transform: translateX(-50%);
|
|
331
|
-
display: flex;
|
|
332
|
-
max-width: calc(100% - 0.5rem);
|
|
333
|
-
align-items: center;
|
|
334
|
-
gap: 0.125rem;
|
|
335
|
-
border: 1px solid var(--line);
|
|
336
|
-
border-radius: 9999px;
|
|
337
|
-
background: var(--surface);
|
|
338
|
-
padding: 0.25rem;
|
|
339
|
-
box-shadow: var(--shadow);
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
.editor-text .site-block-menu button {
|
|
343
|
-
display: grid;
|
|
344
|
-
width: 2.5rem;
|
|
345
|
-
height: 2.5rem;
|
|
346
|
-
flex-shrink: 0;
|
|
347
|
-
place-items: center;
|
|
348
|
-
border-radius: 9999px;
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
.editor-text .site-block-menu button:hover,
|
|
352
|
-
.editor-text .site-block-menu button:focus-visible {
|
|
353
|
-
outline: none;
|
|
354
|
-
background: var(--tint);
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
.editor-text .site-block-menu .site-block-danger {
|
|
358
|
-
color: var(--accent);
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
/* The icons over the selected text, on a phone at the bottom over the keyboard (selectionMenu in
|
|
362
|
-
MarkdownEditor.tsx). */
|
|
363
|
-
.editor-selection-menu {
|
|
364
|
-
position: fixed;
|
|
365
|
-
z-index: 40;
|
|
366
|
-
display: flex;
|
|
367
|
-
gap: 0.125rem;
|
|
368
|
-
border: 1px solid var(--line);
|
|
369
|
-
border-radius: 9999px;
|
|
370
|
-
background: var(--surface);
|
|
371
|
-
padding: 0.25rem;
|
|
372
|
-
box-shadow: var(--shadow);
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
.editor-selection-menu[hidden],
|
|
376
|
-
.editor-selection-menu button[hidden] {
|
|
377
|
-
display: none;
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
.editor-selection-menu button {
|
|
381
|
-
display: grid;
|
|
382
|
-
width: 2.5rem;
|
|
383
|
-
height: 2.5rem;
|
|
384
|
-
place-items: center;
|
|
385
|
-
border-radius: 9999px;
|
|
386
|
-
color: var(--muted);
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
.editor-selection-menu button:hover,
|
|
390
|
-
.editor-selection-menu button:focus-visible {
|
|
391
|
-
outline: none;
|
|
392
|
-
background: var(--tint);
|
|
393
|
-
color: var(--ink);
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
.editor-selection-menu button[aria-pressed='true'] {
|
|
397
|
-
background: var(--tint);
|
|
398
|
-
color: var(--accent);
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
/* Only drawn: the taps go to the card. */
|
|
402
|
-
.editor-text .site-block-preview {
|
|
403
|
-
pointer-events: none;
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
/* The space a block keeps around it on the site (a price card, a panel) is the frame's here. */
|
|
407
|
-
.editor-text .site-block-preview > :first-child {
|
|
408
|
-
margin-top: 0;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
.editor-text .site-block-preview > :last-child {
|
|
412
|
-
margin-bottom: 0;
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
/* A section of a fixed page in the type of the site's pages, not that of the text. */
|
|
416
|
-
.editor-text .site-block-section {
|
|
417
|
-
font-size: 1.0625rem;
|
|
418
|
-
line-height: 1.5;
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
.editor-text .site-block-lines {
|
|
422
|
-
display: flex;
|
|
423
|
-
flex-direction: column;
|
|
424
|
-
gap: 0.15rem;
|
|
425
|
-
padding: 0 0.25rem;
|
|
426
|
-
color: var(--muted);
|
|
427
|
-
font-size: 0.875rem;
|
|
428
|
-
line-height: 1.45;
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
/* A fixed page's text as on the site (data-look, looksOf in sections.mjs): the headings of the
|
|
432
|
-
sections (SectionHeading, PageSection, the boxes on the front page and the prices page), the text
|
|
433
|
-
a section takes as its own, the front page's subtitle and introduction (home/Hero.astro) and a
|
|
434
|
-
page's introduction (PageHeader). Sizes, line heights and colours as the components' classes. */
|
|
435
|
-
.editor-text .ProseMirror > [data-look] {
|
|
436
|
-
margin-block: 1rem 0;
|
|
437
|
-
max-width: none;
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
.editor-text .ProseMirror > h2[data-look] {
|
|
441
|
-
margin-block: 2.5rem 0.75rem;
|
|
442
|
-
color: var(--ink);
|
|
443
|
-
font-weight: 500;
|
|
444
|
-
letter-spacing: -0.025em;
|
|
445
|
-
line-height: 1.25;
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
.editor-text .ProseMirror > [data-look='section'] {
|
|
449
|
-
font-size: 2.1rem;
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
.editor-text .ProseMirror > [data-look='page-section'] {
|
|
453
|
-
font-size: 2rem;
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
.editor-text .ProseMirror > h2[data-look='card-title'] {
|
|
457
|
-
font-size: 1.5rem;
|
|
458
|
-
line-height: 2rem;
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
.editor-text .ProseMirror > h2[data-look='urgent'] {
|
|
462
|
-
font-size: 1.25rem;
|
|
463
|
-
line-height: 1.75rem;
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
.editor-text .ProseMirror > [data-look~='section-intro'],
|
|
467
|
-
.editor-text .ProseMirror > [data-look~='page-intro'] {
|
|
468
|
-
max-width: 52ch;
|
|
469
|
-
color: var(--muted);
|
|
470
|
-
font-size: 1.125rem;
|
|
471
|
-
line-height: 1.75rem;
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
.editor-text .ProseMirror > [data-look~='page-section-intro'] {
|
|
475
|
-
max-width: 52ch;
|
|
476
|
-
color: var(--muted);
|
|
477
|
-
font-size: 1.0625rem;
|
|
478
|
-
line-height: 1.5;
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
.editor-text .ProseMirror > [data-look~='about'],
|
|
482
|
-
.editor-text .ProseMirror > [data-look~='large'] {
|
|
483
|
-
font-size: 1.125rem;
|
|
484
|
-
line-height: 1.625;
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
.editor-text .ProseMirror > [data-look~='about'][data-look~='rest'],
|
|
488
|
-
.editor-text .ProseMirror > [data-look~='note'] {
|
|
489
|
-
color: var(--muted);
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
.editor-text .ProseMirror > [data-look~='note'] {
|
|
493
|
-
font-size: 1.0625rem;
|
|
494
|
-
line-height: 1.5;
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
.editor-text .ProseMirror > [data-look~='small-note'] {
|
|
498
|
-
color: var(--muted);
|
|
499
|
-
font-size: 0.95rem;
|
|
500
|
-
line-height: 1.5;
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
.editor-text .ProseMirror > [data-look='hero-subtitle'] {
|
|
504
|
-
max-width: 30ch;
|
|
505
|
-
margin-top: 0;
|
|
506
|
-
font-size: 1.5rem;
|
|
507
|
-
line-height: 1.375;
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
.editor-text .ProseMirror > [data-look='hero-intro'] {
|
|
511
|
-
max-width: 40ch;
|
|
512
|
-
color: var(--muted);
|
|
513
|
-
font-size: 1.125rem;
|
|
514
|
-
line-height: 1.625;
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
@media (min-width: 768px) {
|
|
518
|
-
.editor-text .ProseMirror > [data-look='section'] {
|
|
519
|
-
font-size: 3rem;
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
.editor-text .ProseMirror > [data-look='page-section'] {
|
|
523
|
-
font-size: 2.25rem;
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
.editor-text .ProseMirror > h2[data-look='card-title'] {
|
|
527
|
-
font-size: 1.875rem;
|
|
528
|
-
line-height: 2.25rem;
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
.editor-text .ProseMirror > [data-look='hero-subtitle'] {
|
|
532
|
-
font-size: 1.875rem;
|
|
533
|
-
line-height: 1.375;
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
.editor-text .ProseMirror > [data-look~='page-intro'] {
|
|
537
|
-
font-size: 1.25rem;
|
|
538
|
-
line-height: 1.75rem;
|
|
539
|
-
}
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
/* A block hidden on the site: faded and grey. */
|
|
543
|
-
.editor-text .site-block-hidden .site-block-preview {
|
|
544
|
-
opacity: 0.4;
|
|
545
|
-
filter: grayscale(1);
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
/* A text with blocks (a page, a fixed page's sections): the cards close together, with the free line
|
|
549
|
-
between two of them to write in: thin, until the cursor is in it (editor-gap-here, MarkdownEditor.tsx)
|
|
550
|
-
or the pointer over it, when it opens up and says so. */
|
|
551
|
-
.editor-spaced .site-block {
|
|
552
|
-
margin-block: 0.25rem;
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
.editor-spaced .ProseMirror > p:has(> br:only-child) {
|
|
556
|
-
margin-block: 0;
|
|
557
|
-
border-radius: 0.5rem;
|
|
558
|
-
padding-inline: 0.5rem;
|
|
559
|
-
padding-block: 0.25rem;
|
|
560
|
-
font-size: 0.875rem;
|
|
561
|
-
line-height: 0.5rem;
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
@media (prefers-reduced-motion: no-preference) {
|
|
565
|
-
.editor-spaced .ProseMirror > p:has(> br:only-child) {
|
|
566
|
-
transition: line-height var(--motion-spatial-fast);
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
|
|
570
|
-
.editor-spaced .ProseMirror:focus > p.editor-gap-here:has(> br:only-child) {
|
|
571
|
-
line-height: 1.5rem;
|
|
572
|
-
}
|
|
573
|
-
|
|
574
|
-
.editor-spaced .ProseMirror:focus > p.editor-gap-here:has(> br:only-child)::before {
|
|
575
|
-
content: 'Skriv tekst her …';
|
|
576
|
-
position: absolute;
|
|
577
|
-
color: var(--muted);
|
|
578
|
-
pointer-events: none;
|
|
579
|
-
}
|
|
580
|
-
|
|
581
|
-
@media (hover: hover) {
|
|
582
|
-
.editor-spaced .ProseMirror > p:has(> br:only-child):hover {
|
|
583
|
-
line-height: 1.5rem;
|
|
584
|
-
}
|
|
585
|
-
|
|
586
|
-
.editor-spaced .ProseMirror > p:has(> br:only-child):hover::before {
|
|
587
|
-
content: 'Skriv tekst her …';
|
|
588
|
-
position: absolute;
|
|
589
|
-
color: var(--muted);
|
|
590
|
-
pointer-events: none;
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
|
|
594
|
-
/* While a sheet or a dialog is open (shown modally, showModal), the page under it does not scroll (only the sheet does).
|
|
595
|
-
Not a <dialog> drawn open in the page, like the search view on "Dele › Tema" (NavigationRestParts.tsx). */
|
|
596
|
-
html:has(dialog:modal) {
|
|
597
|
-
overflow: hidden;
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
dialog {
|
|
601
|
-
overscroll-behavior: contain;
|
|
602
|
-
}
|
|
1
|
+
/* The editor's parts are the theme's UI parts (ui.tsx), in the theme's design; its own parts take the theme's variables
|
|
2
|
+
(--block-radius, --block-radius-small, --block-shadow). Only what is the editor's alone is here. Low specificity
|
|
3
|
+
(:where), so a theme's :root wins. */
|
|
4
|
+
:where(:root) {
|
|
5
|
+
/* How a check went (CheckList: the SEO rating), as PageSpeed shows it: the mark before a check that is fine and one
|
|
6
|
+
that can be done better, and the score's ring (from 90 good, from 50 average, else bad) with its number and the
|
|
7
|
+
light circle in it; the same in every theme. */
|
|
8
|
+
--editor-status-good: #0cce6b;
|
|
9
|
+
--editor-status-good-text: #008800;
|
|
10
|
+
--editor-status-good-surface: color-mix(in srgb, #0cce6b 10%, var(--surface));
|
|
11
|
+
--editor-status-average: #ffa400;
|
|
12
|
+
--editor-status-average-text: #c33300;
|
|
13
|
+
--editor-status-average-surface: color-mix(in srgb, #ffa400 10%, var(--surface));
|
|
14
|
+
--editor-status-bad: #ff4e42;
|
|
15
|
+
--editor-status-bad-text: #cc0000;
|
|
16
|
+
--editor-status-bad-surface: color-mix(in srgb, #ff4e42 10%, var(--surface));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* In dark mode the score's number in the light colours, which are read on the dark. */
|
|
20
|
+
@media (prefers-color-scheme: dark) {
|
|
21
|
+
:where(:root:not([data-theme='light'])) {
|
|
22
|
+
--editor-status-good-text: var(--editor-status-good);
|
|
23
|
+
--editor-status-average-text: var(--editor-status-average);
|
|
24
|
+
--editor-status-bad-text: var(--editor-status-bad);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
:where(:root[data-theme='dark']) {
|
|
28
|
+
--editor-status-good-text: var(--editor-status-good);
|
|
29
|
+
--editor-status-average-text: var(--editor-status-average);
|
|
30
|
+
--editor-status-bad-text: var(--editor-status-bad);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* The text field (MarkdownEditor.tsx). The rest of the editor uses the site's Tailwind classes. */
|
|
34
|
+
.editor-text .ProseMirror {
|
|
35
|
+
min-height: 50vh;
|
|
36
|
+
outline: none;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* A text in a field (a section of the front page) is short. */
|
|
40
|
+
.editor-text-short .ProseMirror {
|
|
41
|
+
min-height: 8rem;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* ProseMirror puts invisible helpers around a picture (empty images and a line break). Next to a
|
|
45
|
+
full-width picture each gets a line of its own, which shows as empty space; hide them there. */
|
|
46
|
+
.editor-text p:has(> .site-picture) > :is(.ProseMirror-separator, .ProseMirror-trailingBreak) {
|
|
47
|
+
display: none !important;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* Milkdown puts a paragraph in every list item; on the site, short lists have none. */
|
|
51
|
+
.editor-text li > p {
|
|
52
|
+
margin-block: 0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* HTML in a line of text is kept as it is but cannot be edited here (on a line of its own it is a
|
|
56
|
+
block, HTML in markdown.mjs). */
|
|
57
|
+
.editor-text [data-type='html'] {
|
|
58
|
+
display: inline-block;
|
|
59
|
+
max-width: 100%;
|
|
60
|
+
overflow-wrap: anywhere;
|
|
61
|
+
border-radius: 0.5rem;
|
|
62
|
+
background: var(--tint);
|
|
63
|
+
padding: 0 0.4em;
|
|
64
|
+
font-family: ui-monospace, monospace;
|
|
65
|
+
font-size: 0.8em;
|
|
66
|
+
color: var(--muted);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/* The bar with "Gem" (FormFrame.tsx) slides up when something has been changed; the messages
|
|
70
|
+
(App.tsx) then go above it. */
|
|
71
|
+
.editor-save-bar {
|
|
72
|
+
animation: editor-rise var(--motion-spatial-fast);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
@keyframes editor-rise {
|
|
76
|
+
from {
|
|
77
|
+
transform: translateY(100%);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@media (prefers-reduced-motion: reduce) {
|
|
82
|
+
.editor-save-bar {
|
|
83
|
+
animation: none;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* An element's name as the theme's plain tooltip (useTooltip in ui.tsx): a popover over everything, placed by the
|
|
88
|
+
script under or over the element; its look is the theme's .tooltip-plain. */
|
|
89
|
+
.editor-tooltip {
|
|
90
|
+
position: fixed;
|
|
91
|
+
inset: auto;
|
|
92
|
+
margin: 0;
|
|
93
|
+
border: 0;
|
|
94
|
+
width: max-content;
|
|
95
|
+
pointer-events: none;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* The field that keeps a form from being saved (WrongField in fields.tsx): the edge of the theme's text field
|
|
99
|
+
(.text-field-input, its edge a box-shadow) in the accent colour, flashing gently three times; around the whole field
|
|
100
|
+
when it has no box of its own (a picture, icons, a switcher). It stays until the next try or a change. */
|
|
101
|
+
.editor-wrong .text-field-input {
|
|
102
|
+
box-shadow:
|
|
103
|
+
inset 0 0 0 2px var(--accent),
|
|
104
|
+
0 0 0 3px color-mix(in srgb, var(--accent) 25%, transparent);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.editor-wrong:not(:has(.text-field-input)) {
|
|
108
|
+
border-radius: 1rem;
|
|
109
|
+
outline: 2px solid var(--accent);
|
|
110
|
+
outline-offset: 6px;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
114
|
+
.editor-wrong .text-field-input {
|
|
115
|
+
animation: editor-flash 0.8s ease-in-out 3;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.editor-wrong:not(:has(.text-field-input)) {
|
|
119
|
+
animation: editor-flash-around 0.8s ease-in-out 3;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
@keyframes editor-flash {
|
|
124
|
+
50% {
|
|
125
|
+
box-shadow:
|
|
126
|
+
inset 0 0 0 1px var(--line),
|
|
127
|
+
0 0 0 3px transparent;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
@keyframes editor-flash-around {
|
|
132
|
+
50% {
|
|
133
|
+
outline-color: transparent;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* A sheet that is dragged up by its top on a phone (SheetTitle in ui.tsx) is as tall as the screen,
|
|
138
|
+
below the clock, or as tall as what is in it, if that is less. */
|
|
139
|
+
@media not (min-width: 48rem) {
|
|
140
|
+
.editor-sheet[data-tall] {
|
|
141
|
+
max-height: calc(100dvh - env(safe-area-inset-top));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* A little motion, so the editor feels like an app: a sheet slides up from the bottom (on a
|
|
146
|
+
computer, where it is a dialog in the middle, it fades in and grows a little) and the page behind
|
|
147
|
+
it darkens (a question, ask.tsx, comes up as the theme's dialog does); a new screen fades in; a message rises up; an item of a
|
|
148
|
+
list that is opened shows its fields softly; a picture in Filer fades in when it has loaded and
|
|
149
|
+
grows a little under the mouse; a button's colours change softly (pressed, it ripples: the theme's .ripple). Only when
|
|
150
|
+
the phone or computer does not ask for less motion. */
|
|
151
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
152
|
+
.editor-sheet[open] {
|
|
153
|
+
animation: editor-sheet-in var(--motion-spatial);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/* A modal navigation drawer (ModalNavigationDrawer in ui.tsx) slides in from the right edge. */
|
|
157
|
+
.editor-drawer[open] {
|
|
158
|
+
animation: editor-drawer-in var(--motion-spatial);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
:is(.editor-sheet, .editor-drawer)[open]::backdrop {
|
|
162
|
+
animation: editor-fade var(--motion-effects);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
@media (min-width: 48rem) {
|
|
166
|
+
.editor-sheet[open] {
|
|
167
|
+
animation: editor-pop var(--motion-spatial-fast);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.editor-screen {
|
|
172
|
+
animation: editor-enter var(--motion-spatial);
|
|
173
|
+
/* A chip set that scrolls reaches out to the screen's edges: the screen's gutter (px-4, md:px-6 in Screen.tsx). */
|
|
174
|
+
--chip-set-bleed: 1rem;
|
|
175
|
+
}
|
|
176
|
+
@media (min-width: 48rem) {
|
|
177
|
+
.editor-screen {
|
|
178
|
+
--chip-set-bleed: 1.5rem;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.editor-reveal {
|
|
183
|
+
animation: editor-enter var(--motion-spatial-fast);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.editor-fade-in {
|
|
187
|
+
opacity: 0;
|
|
188
|
+
transition:
|
|
189
|
+
opacity var(--motion-effects),
|
|
190
|
+
scale var(--motion-spatial);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.editor-fade-in[data-loaded] {
|
|
194
|
+
opacity: 1;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/* In the base layer, so a Tailwind class on the button itself still decides. */
|
|
198
|
+
@layer base {
|
|
199
|
+
:is(button, a):not(:disabled, .ProseMirror *) {
|
|
200
|
+
transition:
|
|
201
|
+
background-color var(--motion-effects-fast),
|
|
202
|
+
color var(--motion-effects-fast);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
@keyframes editor-sheet-in {
|
|
208
|
+
from {
|
|
209
|
+
transform: translateY(100%);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
@keyframes editor-drawer-in {
|
|
214
|
+
from {
|
|
215
|
+
transform: translateX(100%);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
@keyframes editor-pop {
|
|
220
|
+
from {
|
|
221
|
+
opacity: 0;
|
|
222
|
+
transform: scale(0.96);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
@keyframes editor-fade {
|
|
227
|
+
from {
|
|
228
|
+
opacity: 0;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
@keyframes editor-enter {
|
|
233
|
+
from {
|
|
234
|
+
opacity: 0;
|
|
235
|
+
transform: translateY(0.5rem);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
:root:has(.editor-save-bar) .snackbar-stack {
|
|
240
|
+
bottom: calc(5.5rem + env(safe-area-inset-bottom));
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/* On a computer, the messages are in the middle of the content, next to the sidebar (App.tsx). */
|
|
244
|
+
@media (width >= 48rem) {
|
|
245
|
+
:root .snackbar-stack {
|
|
246
|
+
padding-left: 4.5rem;
|
|
247
|
+
}
|
|
248
|
+
:root[data-sidebar='open'] .snackbar-stack {
|
|
249
|
+
padding-left: 16rem;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/* Like an app: no grey flash when tapping links and buttons on a phone, and no zoom on a double tap.
|
|
254
|
+
Nothing sticks out at the side: on Android, anything wider than the screen, even for a moment while
|
|
255
|
+
the page opens, makes Chrome lay the whole page out wider than the screen, and as zooming is off
|
|
256
|
+
(pages/editor/index.astro) it then stays cut off on the right. */
|
|
257
|
+
html,
|
|
258
|
+
body {
|
|
259
|
+
overflow-x: clip;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
html {
|
|
263
|
+
-webkit-tap-highlight-color: transparent;
|
|
264
|
+
touch-action: manipulation;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/* A block of the site in the text (Book en tid, Udtalelser …; MarkdownEditor.tsx): the block as it
|
|
268
|
+
looks on the site (src/apps/<app>/blocks/, previews.tsx) in a thin, dashed square frame, not text. Tapping it opens a row
|
|
269
|
+
of icons on it with what can be done with it. The frame stands out a little to the sides, so the block
|
|
270
|
+
lines up with the text. A picture in the text is a card like it (in its paragraph). */
|
|
271
|
+
.editor-text .site-block {
|
|
272
|
+
position: relative;
|
|
273
|
+
margin-block: 1.5em;
|
|
274
|
+
user-select: none;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.editor-text .site-picture {
|
|
278
|
+
display: block;
|
|
279
|
+
margin-block: 0;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
.editor-text .site-picture :is(img, .picture-crop) {
|
|
283
|
+
margin-block: 0;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.editor-text .site-block-card {
|
|
287
|
+
display: block;
|
|
288
|
+
width: calc(100% + 1.25rem);
|
|
289
|
+
margin-inline: -0.625rem;
|
|
290
|
+
position: relative;
|
|
291
|
+
border-radius: 0;
|
|
292
|
+
border: 1.5px dashed color-mix(in srgb, var(--muted) 45%, transparent);
|
|
293
|
+
padding: 0.5rem;
|
|
294
|
+
text-align: left;
|
|
295
|
+
cursor: pointer;
|
|
296
|
+
transition: border-color var(--motion-effects);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
.editor-text .site-block-card:hover,
|
|
300
|
+
.editor-text .site-block-card[aria-expanded='true'] {
|
|
301
|
+
border-color: var(--accent);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.editor-text .site-block-card:focus-visible {
|
|
305
|
+
outline: 2px solid var(--accent);
|
|
306
|
+
outline-offset: 2px;
|
|
307
|
+
border-radius: 0;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.editor-text .site-block-hidden-badge {
|
|
311
|
+
position: absolute;
|
|
312
|
+
z-index: 1;
|
|
313
|
+
top: 1rem;
|
|
314
|
+
right: 1rem;
|
|
315
|
+
display: grid;
|
|
316
|
+
width: 2rem;
|
|
317
|
+
height: 2rem;
|
|
318
|
+
place-items: center;
|
|
319
|
+
border-radius: 9999px;
|
|
320
|
+
background: var(--ink);
|
|
321
|
+
color: var(--bg);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/* The block's menu: a row of icons on the top edge of the frame, in the middle. */
|
|
325
|
+
.editor-text .site-block-menu {
|
|
326
|
+
position: absolute;
|
|
327
|
+
z-index: 15;
|
|
328
|
+
top: -1.4rem;
|
|
329
|
+
left: 50%;
|
|
330
|
+
transform: translateX(-50%);
|
|
331
|
+
display: flex;
|
|
332
|
+
max-width: calc(100% - 0.5rem);
|
|
333
|
+
align-items: center;
|
|
334
|
+
gap: 0.125rem;
|
|
335
|
+
border: 1px solid var(--line);
|
|
336
|
+
border-radius: 9999px;
|
|
337
|
+
background: var(--surface);
|
|
338
|
+
padding: 0.25rem;
|
|
339
|
+
box-shadow: var(--shadow);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
.editor-text .site-block-menu button {
|
|
343
|
+
display: grid;
|
|
344
|
+
width: 2.5rem;
|
|
345
|
+
height: 2.5rem;
|
|
346
|
+
flex-shrink: 0;
|
|
347
|
+
place-items: center;
|
|
348
|
+
border-radius: 9999px;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
.editor-text .site-block-menu button:hover,
|
|
352
|
+
.editor-text .site-block-menu button:focus-visible {
|
|
353
|
+
outline: none;
|
|
354
|
+
background: var(--tint);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
.editor-text .site-block-menu .site-block-danger {
|
|
358
|
+
color: var(--accent);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/* The icons over the selected text, on a phone at the bottom over the keyboard (selectionMenu in
|
|
362
|
+
MarkdownEditor.tsx). */
|
|
363
|
+
.editor-selection-menu {
|
|
364
|
+
position: fixed;
|
|
365
|
+
z-index: 40;
|
|
366
|
+
display: flex;
|
|
367
|
+
gap: 0.125rem;
|
|
368
|
+
border: 1px solid var(--line);
|
|
369
|
+
border-radius: 9999px;
|
|
370
|
+
background: var(--surface);
|
|
371
|
+
padding: 0.25rem;
|
|
372
|
+
box-shadow: var(--shadow);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
.editor-selection-menu[hidden],
|
|
376
|
+
.editor-selection-menu button[hidden] {
|
|
377
|
+
display: none;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.editor-selection-menu button {
|
|
381
|
+
display: grid;
|
|
382
|
+
width: 2.5rem;
|
|
383
|
+
height: 2.5rem;
|
|
384
|
+
place-items: center;
|
|
385
|
+
border-radius: 9999px;
|
|
386
|
+
color: var(--muted);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
.editor-selection-menu button:hover,
|
|
390
|
+
.editor-selection-menu button:focus-visible {
|
|
391
|
+
outline: none;
|
|
392
|
+
background: var(--tint);
|
|
393
|
+
color: var(--ink);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
.editor-selection-menu button[aria-pressed='true'] {
|
|
397
|
+
background: var(--tint);
|
|
398
|
+
color: var(--accent);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/* Only drawn: the taps go to the card. */
|
|
402
|
+
.editor-text .site-block-preview {
|
|
403
|
+
pointer-events: none;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
/* The space a block keeps around it on the site (a price card, a panel) is the frame's here. */
|
|
407
|
+
.editor-text .site-block-preview > :first-child {
|
|
408
|
+
margin-top: 0;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
.editor-text .site-block-preview > :last-child {
|
|
412
|
+
margin-bottom: 0;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/* A section of a fixed page in the type of the site's pages, not that of the text. */
|
|
416
|
+
.editor-text .site-block-section {
|
|
417
|
+
font-size: 1.0625rem;
|
|
418
|
+
line-height: 1.5;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
.editor-text .site-block-lines {
|
|
422
|
+
display: flex;
|
|
423
|
+
flex-direction: column;
|
|
424
|
+
gap: 0.15rem;
|
|
425
|
+
padding: 0 0.25rem;
|
|
426
|
+
color: var(--muted);
|
|
427
|
+
font-size: 0.875rem;
|
|
428
|
+
line-height: 1.45;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/* A fixed page's text as on the site (data-look, looksOf in sections.mjs): the headings of the
|
|
432
|
+
sections (SectionHeading, PageSection, the boxes on the front page and the prices page), the text
|
|
433
|
+
a section takes as its own, the front page's subtitle and introduction (home/Hero.astro) and a
|
|
434
|
+
page's introduction (PageHeader). Sizes, line heights and colours as the components' classes. */
|
|
435
|
+
.editor-text .ProseMirror > [data-look] {
|
|
436
|
+
margin-block: 1rem 0;
|
|
437
|
+
max-width: none;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
.editor-text .ProseMirror > h2[data-look] {
|
|
441
|
+
margin-block: 2.5rem 0.75rem;
|
|
442
|
+
color: var(--ink);
|
|
443
|
+
font-weight: 500;
|
|
444
|
+
letter-spacing: -0.025em;
|
|
445
|
+
line-height: 1.25;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
.editor-text .ProseMirror > [data-look='section'] {
|
|
449
|
+
font-size: 2.1rem;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
.editor-text .ProseMirror > [data-look='page-section'] {
|
|
453
|
+
font-size: 2rem;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
.editor-text .ProseMirror > h2[data-look='card-title'] {
|
|
457
|
+
font-size: 1.5rem;
|
|
458
|
+
line-height: 2rem;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
.editor-text .ProseMirror > h2[data-look='urgent'] {
|
|
462
|
+
font-size: 1.25rem;
|
|
463
|
+
line-height: 1.75rem;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
.editor-text .ProseMirror > [data-look~='section-intro'],
|
|
467
|
+
.editor-text .ProseMirror > [data-look~='page-intro'] {
|
|
468
|
+
max-width: 52ch;
|
|
469
|
+
color: var(--muted);
|
|
470
|
+
font-size: 1.125rem;
|
|
471
|
+
line-height: 1.75rem;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
.editor-text .ProseMirror > [data-look~='page-section-intro'] {
|
|
475
|
+
max-width: 52ch;
|
|
476
|
+
color: var(--muted);
|
|
477
|
+
font-size: 1.0625rem;
|
|
478
|
+
line-height: 1.5;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
.editor-text .ProseMirror > [data-look~='about'],
|
|
482
|
+
.editor-text .ProseMirror > [data-look~='large'] {
|
|
483
|
+
font-size: 1.125rem;
|
|
484
|
+
line-height: 1.625;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
.editor-text .ProseMirror > [data-look~='about'][data-look~='rest'],
|
|
488
|
+
.editor-text .ProseMirror > [data-look~='note'] {
|
|
489
|
+
color: var(--muted);
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
.editor-text .ProseMirror > [data-look~='note'] {
|
|
493
|
+
font-size: 1.0625rem;
|
|
494
|
+
line-height: 1.5;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
.editor-text .ProseMirror > [data-look~='small-note'] {
|
|
498
|
+
color: var(--muted);
|
|
499
|
+
font-size: 0.95rem;
|
|
500
|
+
line-height: 1.5;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
.editor-text .ProseMirror > [data-look='hero-subtitle'] {
|
|
504
|
+
max-width: 30ch;
|
|
505
|
+
margin-top: 0;
|
|
506
|
+
font-size: 1.5rem;
|
|
507
|
+
line-height: 1.375;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
.editor-text .ProseMirror > [data-look='hero-intro'] {
|
|
511
|
+
max-width: 40ch;
|
|
512
|
+
color: var(--muted);
|
|
513
|
+
font-size: 1.125rem;
|
|
514
|
+
line-height: 1.625;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
@media (min-width: 768px) {
|
|
518
|
+
.editor-text .ProseMirror > [data-look='section'] {
|
|
519
|
+
font-size: 3rem;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
.editor-text .ProseMirror > [data-look='page-section'] {
|
|
523
|
+
font-size: 2.25rem;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
.editor-text .ProseMirror > h2[data-look='card-title'] {
|
|
527
|
+
font-size: 1.875rem;
|
|
528
|
+
line-height: 2.25rem;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
.editor-text .ProseMirror > [data-look='hero-subtitle'] {
|
|
532
|
+
font-size: 1.875rem;
|
|
533
|
+
line-height: 1.375;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
.editor-text .ProseMirror > [data-look~='page-intro'] {
|
|
537
|
+
font-size: 1.25rem;
|
|
538
|
+
line-height: 1.75rem;
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
/* A block hidden on the site: faded and grey. */
|
|
543
|
+
.editor-text .site-block-hidden .site-block-preview {
|
|
544
|
+
opacity: 0.4;
|
|
545
|
+
filter: grayscale(1);
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
/* A text with blocks (a page, a fixed page's sections): the cards close together, with the free line
|
|
549
|
+
between two of them to write in: thin, until the cursor is in it (editor-gap-here, MarkdownEditor.tsx)
|
|
550
|
+
or the pointer over it, when it opens up and says so. */
|
|
551
|
+
.editor-spaced .site-block {
|
|
552
|
+
margin-block: 0.25rem;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
.editor-spaced .ProseMirror > p:has(> br:only-child) {
|
|
556
|
+
margin-block: 0;
|
|
557
|
+
border-radius: 0.5rem;
|
|
558
|
+
padding-inline: 0.5rem;
|
|
559
|
+
padding-block: 0.25rem;
|
|
560
|
+
font-size: 0.875rem;
|
|
561
|
+
line-height: 0.5rem;
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
565
|
+
.editor-spaced .ProseMirror > p:has(> br:only-child) {
|
|
566
|
+
transition: line-height var(--motion-spatial-fast);
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
.editor-spaced .ProseMirror:focus > p.editor-gap-here:has(> br:only-child) {
|
|
571
|
+
line-height: 1.5rem;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
.editor-spaced .ProseMirror:focus > p.editor-gap-here:has(> br:only-child)::before {
|
|
575
|
+
content: 'Skriv tekst her …';
|
|
576
|
+
position: absolute;
|
|
577
|
+
color: var(--muted);
|
|
578
|
+
pointer-events: none;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
@media (hover: hover) {
|
|
582
|
+
.editor-spaced .ProseMirror > p:has(> br:only-child):hover {
|
|
583
|
+
line-height: 1.5rem;
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
.editor-spaced .ProseMirror > p:has(> br:only-child):hover::before {
|
|
587
|
+
content: 'Skriv tekst her …';
|
|
588
|
+
position: absolute;
|
|
589
|
+
color: var(--muted);
|
|
590
|
+
pointer-events: none;
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
/* While a sheet or a dialog is open (shown modally, showModal), the page under it does not scroll (only the sheet does).
|
|
595
|
+
Not a <dialog> drawn open in the page, like the search view on "Dele › Tema" (NavigationRestParts.tsx). */
|
|
596
|
+
html:has(dialog:modal) {
|
|
597
|
+
overflow: hidden;
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
dialog {
|
|
601
|
+
overscroll-behavior: contain;
|
|
602
|
+
}
|