@jant/core 0.6.15 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -11
- package/bin/commands/assets/upload.js +192 -15
- package/bin/commands/import-site.js +67 -4
- package/bin/commands/reset-password.js +21 -8
- package/bin/commands/site/snapshot/export.js +1 -1
- package/bin/commands/site/snapshot/import.js +1 -1
- package/bin/lib/d1-query.js +5 -16
- package/bin/lib/node-env.js +40 -4
- package/bin/lib/site-selection.js +85 -29
- package/bin/lib/wrangler-cli.js +28 -2
- package/bin/lib/wrangler-json.js +35 -0
- package/dist/{app-C-oi_t8W.js → app-K_Aa1MMn.js} +52623 -13193
- package/dist/client/.vite/manifest.json +255 -90
- package/dist/client/_assets/chunks/confirm-D7GrwsCN.js +45 -0
- package/dist/client/_assets/chunks/create-editor-CD3FhrOB.js +257 -0
- package/dist/client/_assets/chunks/{native-DpcrFAPh.js → emoji-mart-C4RpRKcU.js} +716 -1
- package/dist/client/_assets/chunks/footnote-rail-CmeoVtnU.js +1 -0
- package/dist/client/_assets/chunks/heic-to-CuP2Qlsw.js +1 -0
- package/dist/client/_assets/chunks/jant-locale-picker-DL6mIOT5.js +69 -0
- package/dist/client/_assets/chunks/lit-DW8VmJAT.js +2 -0
- package/dist/client/_assets/chunks/mediabunny-DRaCQ1r-.js +31 -0
- package/dist/client/_assets/chunks/rolldown-runtime-hePW80VL.js +1 -0
- package/dist/client/_assets/chunks/settings-paths-BcdySNx6.js +84 -0
- package/dist/client/_assets/chunks/site-header-nav-DzXsFk05.js +1 -0
- package/dist/client/_assets/chunks/slug-format-CRXO1AL5.js +1 -0
- package/dist/client/_assets/chunks/slugify-373citbs.js +1 -0
- package/dist/client/_assets/chunks/sortable-list-CgaL2jCs.js +2 -0
- package/dist/client/_assets/chunks/types-D5iF3H1a.js +1 -0
- package/dist/client/_assets/chunks/unsafe-html-B5ZEXaxg.js +1 -0
- package/dist/client/_assets/chunks/unsafe-svg-0QCkP0vZ.js +2 -0
- package/dist/client/_assets/client-GiYENVw8.css +2 -0
- package/dist/client/_assets/client-VnFxJN7G.js +295 -0
- package/dist/client/_assets/client-auth-k8gJ6QJj.js +828 -0
- package/dist/client/_assets/client-author-DQ8R-8KR.css +2 -0
- package/dist/client/_assets/client-compose-B_kDtWkW.js +2004 -0
- package/dist/client/_assets/client-manage-M90aSTOk.js +2170 -0
- package/dist/client/_assets/client-settings-DfYs9n1F.js +1112 -0
- package/dist/{export-CsFx6F_M.js → github-sync-BPAvT999.js} +2343 -110
- package/dist/index.js +2 -5
- package/dist/node.js +5 -7
- package/package.json +3 -3
- package/src/__tests__/auth-session-freshness.test.ts +57 -0
- package/src/__tests__/basecoat-variants.test.ts +121 -0
- package/src/__tests__/bin/assets-upload.test.ts +68 -0
- package/src/__tests__/export-hugo-build.test.ts +260 -0
- package/src/__tests__/export-service.test.ts +231 -0
- package/src/__tests__/helpers/component-css.ts +91 -0
- package/src/__tests__/helpers/db.ts +33 -0
- package/src/__tests__/helpers/export-fixtures.ts +3 -0
- package/src/__tests__/mise-config.test.ts +22 -0
- package/src/__tests__/stylesheet-audience.test.ts +159 -0
- package/src/__tests__/stylesheet-breakpoints.test.ts +183 -0
- package/src/app.tsx +71 -16
- package/src/auth.ts +18 -1
- package/src/client/__tests__/collection-page-actions.test.ts +51 -2
- package/src/client/__tests__/compose-bridge-image-upload.test.ts +196 -0
- package/src/client/__tests__/compose-bridge-video-poster.test.ts +159 -0
- package/src/client/__tests__/compose-bridge.test.ts +524 -2
- package/src/client/__tests__/compose-launch.test.ts +62 -1
- package/src/client/__tests__/compose-shortcuts.test.ts +57 -8
- package/src/client/__tests__/compose-triggers.test.ts +90 -0
- package/src/client/__tests__/copy-field.test.ts +162 -0
- package/src/client/__tests__/custom-url-menu.test.ts +127 -6
- package/src/client/__tests__/image-processor.test.ts +324 -2
- package/src/client/__tests__/lazy-entries.test.ts +92 -0
- package/src/client/__tests__/media-scroll-hint.test.ts +155 -0
- package/src/client/__tests__/runtime-paths.test.ts +84 -0
- package/src/client/__tests__/smart-collection-page-actions.test.ts +158 -0
- package/src/client/__tests__/toast.test.ts +88 -1
- package/src/client/__tests__/video-processor-probe.test.ts +175 -0
- package/src/client/__tests__/video-processor.test.ts +181 -0
- package/src/client/audio-processor.ts +24 -15
- package/src/client/audio-waveform.ts +49 -0
- package/src/client/collection-dialog-host.ts +72 -0
- package/src/client/collection-navigation.ts +51 -16
- package/src/client/collection-page-actions.ts +26 -0
- package/src/client/components/__tests__/compose-format-convert.test.ts +0 -19
- package/src/client/components/__tests__/jant-collection-dialog.test.ts +329 -0
- package/src/client/components/__tests__/jant-collection-directory.test.ts +274 -10
- package/src/client/components/__tests__/jant-collection-form.test.ts +59 -178
- package/src/client/components/__tests__/jant-command-palette.test.ts +79 -0
- package/src/client/components/__tests__/jant-compose-dialog-draft-storage.test.ts +340 -0
- package/src/client/components/__tests__/jant-compose-dialog.test.ts +3283 -389
- package/src/client/components/__tests__/jant-compose-editor.test.ts +581 -86
- package/src/client/components/__tests__/jant-compose-fullscreen.test.ts +34 -89
- package/src/client/components/__tests__/jant-locale-picker.test.ts +207 -0
- package/src/client/components/__tests__/jant-nav-manager.test.ts +234 -15
- package/src/client/components/__tests__/jant-post-menu.test.ts +413 -2
- package/src/client/components/__tests__/jant-post-picker.test.ts +197 -0
- package/src/client/components/__tests__/jant-settings-avatar.test.ts +15 -12
- package/src/client/components/__tests__/jant-settings-general.test.ts +541 -172
- package/src/client/components/__tests__/jant-settings-language.test.ts +851 -0
- package/src/client/components/__tests__/jant-smart-collection-dialog.test.ts +665 -0
- package/src/client/components/collection-dialog-types.ts +49 -0
- package/src/client/components/collection-manager-types.ts +32 -1
- package/src/client/components/collection-types.ts +1 -15
- package/src/client/components/compose-format-convert.ts +5 -1
- package/src/client/components/compose-types.ts +121 -3
- package/src/client/components/jant-collection-dialog.ts +722 -0
- package/src/client/components/jant-collection-directory.ts +567 -182
- package/src/client/components/jant-collection-form.ts +53 -232
- package/src/client/components/jant-command-palette.ts +106 -49
- package/src/client/components/jant-compose-dialog.ts +2757 -1194
- package/src/client/components/jant-compose-editor.ts +866 -397
- package/src/client/components/jant-compose-fullscreen.ts +53 -47
- package/src/client/components/jant-config-editor.ts +65 -53
- package/src/client/components/jant-confirm-dialog.ts +13 -11
- package/src/client/components/jant-locale-picker.ts +418 -0
- package/src/client/components/jant-media-lightbox.ts +146 -136
- package/src/client/components/jant-nav-manager.ts +690 -366
- package/src/client/components/jant-post-menu.ts +1142 -268
- package/src/client/components/jant-post-picker.ts +324 -0
- package/src/client/components/jant-repo-picker.ts +138 -106
- package/src/client/components/jant-settings-avatar.ts +31 -27
- package/src/client/components/jant-settings-general.ts +617 -543
- package/src/client/components/jant-settings-language.ts +1087 -0
- package/src/client/components/jant-smart-collection-dialog.ts +1021 -0
- package/src/client/components/jant-text-preview.ts +94 -86
- package/src/client/components/nav-manager-types.ts +62 -1
- package/src/client/components/settings-types.ts +14 -29
- package/src/client/components/smart-collection-conditions.ts +285 -0
- package/src/client/components/smart-collection-dialog-types.ts +68 -0
- package/src/client/compose-bridge.ts +336 -242
- package/src/client/compose-launch.ts +89 -2
- package/src/client/compose-shortcuts.ts +9 -7
- package/src/client/compose-triggers.ts +50 -0
- package/src/client/copy-field.ts +108 -0
- package/src/client/custom-url-menu.ts +60 -4
- package/src/client/icons.ts +14 -0
- package/src/client/image-plan.ts +165 -0
- package/src/client/image-processor.ts +195 -117
- package/src/client/image-worker-client.ts +45 -0
- package/src/client/image-worker.ts +135 -0
- package/src/client/lazy-entries.ts +95 -0
- package/src/client/lazy-slugify.ts +2 -2
- package/src/client/media-scroll-hint.ts +43 -2
- package/src/client/mediabunny.ts +29 -0
- package/src/client/post-picker.ts +41 -0
- package/src/client/post-refresh.ts +135 -0
- package/src/client/runtime-paths.ts +74 -1
- package/src/client/settings-bridge.ts +4 -10
- package/src/client/site-header-nav.js +18 -6
- package/src/client/smart-collection-dialog-host.ts +116 -0
- package/src/client/smart-collection-page-actions.ts +208 -0
- package/src/client/tiptap/__tests__/bubble-menu.test.ts +110 -0
- package/src/client/tiptap/__tests__/floating-position.test.ts +136 -1
- package/src/client/tiptap/__tests__/inline-image-upload.test.ts +37 -0
- package/src/client/tiptap/__tests__/link-input-rules.test.ts +121 -0
- package/src/client/tiptap/bubble-menu.ts +47 -16
- package/src/client/tiptap/floating-position.ts +216 -2
- package/src/client/tiptap/inline-image-upload.ts +7 -3
- package/src/client/tiptap/link-input-rules.ts +4 -4
- package/src/client/tiptap/link-toolbar.ts +22 -9
- package/src/client/toast.ts +143 -38
- package/src/client/types/vite-worker.d.ts +12 -0
- package/src/client/upload-with-metadata.ts +3 -13
- package/src/client/video-processor.ts +351 -107
- package/src/client-auth.ts +14 -31
- package/src/client-compose.ts +19 -0
- package/src/client-manage.ts +13 -0
- package/src/client-settings.ts +14 -0
- package/src/client-site.ts +10 -3
- package/src/client.ts +4 -0
- package/src/db/__tests__/backfill-nav-label-mirrors.test.ts +149 -0
- package/src/db/__tests__/backfill-thread-activity.test.ts +234 -0
- package/src/db/__tests__/schema-enum-sources.test.ts +33 -0
- package/src/db/__tests__/smart-collection-placement.test.ts +402 -0
- package/src/db/__tests__/thread-activity.test.ts +113 -0
- package/src/db/backfills/0005_split_thread_activity_from_quiet_replies.sql +68 -0
- package/src/db/backfills/0006_clear_mirrored_page_nav_labels.sql +31 -0
- package/src/db/migrations/0031_many_ego.sql +3 -0
- package/src/db/migrations/0032_married_tomas.sql +3 -0
- package/src/db/migrations/0033_busy_johnny_storm.sql +198 -0
- package/src/db/migrations/0034_cheerful_rumiko_fujikawa.sql +35 -0
- package/src/db/migrations/meta/0031_snapshot.json +2562 -0
- package/src/db/migrations/meta/0032_snapshot.json +2582 -0
- package/src/db/migrations/meta/0033_snapshot.json +2816 -0
- package/src/db/migrations/meta/0034_snapshot.json +2816 -0
- package/src/db/migrations/meta/_journal.json +28 -0
- package/src/db/migrations/pg/0029_rare_hairball.sql +3 -0
- package/src/db/migrations/pg/0030_abandoned_nighthawk.sql +3 -0
- package/src/db/migrations/pg/0031_strong_ultimatum.sql +128 -0
- package/src/db/migrations/pg/0032_furry_multiple_man.sql +6 -0
- package/src/db/migrations/pg/meta/0029_snapshot.json +3289 -0
- package/src/db/migrations/pg/meta/0030_snapshot.json +3329 -0
- package/src/db/migrations/pg/meta/0031_snapshot.json +3660 -0
- package/src/db/migrations/pg/meta/0032_snapshot.json +3660 -0
- package/src/db/migrations/pg/meta/_journal.json +28 -0
- package/src/db/pg/schema.ts +213 -27
- package/src/db/post-visibility.ts +117 -0
- package/src/db/schema.ts +242 -27
- package/src/db/thread-activity.ts +101 -0
- package/src/i18n/__tests__/detect.test.ts +26 -81
- package/src/i18n/__tests__/supported-locales.test.ts +83 -0
- package/src/i18n/context.tsx +12 -2
- package/src/i18n/detect.ts +7 -66
- package/src/i18n/locales/glossary.zh-Hans.yml +44 -4
- package/src/i18n/locales/glossary.zh-Hant.yml +44 -4
- package/src/i18n/locales/public/en.po +568 -168
- package/src/i18n/locales/public/en.ts +1 -1
- package/src/i18n/locales/public/zh-Hans.po +562 -162
- package/src/i18n/locales/public/zh-Hans.ts +1 -1
- package/src/i18n/locales/public/zh-Hant.po +562 -162
- package/src/i18n/locales/public/zh-Hant.ts +1 -1
- package/src/i18n/locales/settings/en.po +551 -69
- package/src/i18n/locales/settings/en.ts +1 -1
- package/src/i18n/locales/settings/zh-Hans.po +597 -115
- package/src/i18n/locales/settings/zh-Hans.ts +1 -1
- package/src/i18n/locales/settings/zh-Hant.po +610 -128
- package/src/i18n/locales/settings/zh-Hant.ts +1 -1
- package/src/i18n/locales.ts +94 -0
- package/src/i18n/middleware.ts +12 -2
- package/src/i18n/supported-locales.ts +80 -0
- package/src/lib/__tests__/api-settings.test.ts +11 -2
- package/src/lib/__tests__/asset-path.test.ts +92 -0
- package/src/lib/__tests__/deferred.test.ts +90 -0
- package/src/lib/__tests__/discover-ping.test.ts +89 -0
- package/src/lib/__tests__/discover.test.ts +410 -0
- package/src/lib/__tests__/feed-policy.test.ts +26 -0
- package/src/lib/__tests__/feed.test.ts +1691 -12
- package/src/lib/__tests__/filter-dimensions.test.ts +341 -0
- package/src/lib/__tests__/hosted-signin.test.ts +1 -1
- package/src/lib/__tests__/http-cache.test.ts +162 -0
- package/src/lib/__tests__/jant-docs-dev.test.ts +21 -0
- package/src/lib/__tests__/jant-docs.test.ts +23 -0
- package/src/lib/__tests__/lang-detect.test.ts +231 -0
- package/src/lib/__tests__/markdown.test.ts +16 -0
- package/src/lib/__tests__/media-helpers.test.ts +81 -0
- package/src/lib/__tests__/navigation.test.ts +135 -1
- package/src/lib/__tests__/resolve-config.test.ts +64 -3
- package/src/lib/__tests__/schemas.test.ts +42 -4
- package/src/lib/__tests__/site-unavailable-page.test.ts +25 -0
- package/src/lib/__tests__/slug.test.ts +88 -0
- package/src/lib/__tests__/slugify.test.ts +85 -0
- package/src/lib/__tests__/storage.test.ts +32 -0
- package/src/lib/__tests__/thread-fold.test.ts +113 -0
- package/src/lib/__tests__/translit.test.ts +87 -0
- package/src/lib/__tests__/upload-sideload.test.ts +14 -0
- package/src/lib/__tests__/url-fetch.test.ts +1 -2
- package/src/lib/__tests__/url.test.ts +93 -34
- package/src/lib/__tests__/view-language.test.ts +413 -0
- package/src/lib/__tests__/worker-response-cache.test.ts +90 -0
- package/src/lib/address.ts +57 -0
- package/src/lib/api-posts.ts +12 -0
- package/src/lib/asset-path.ts +98 -1
- package/src/lib/build-env.ts +16 -0
- package/src/lib/collection-groups.ts +5 -1
- package/src/lib/collection-paths.ts +3 -10
- package/src/lib/constants.ts +28 -3
- package/src/lib/copy-field.ts +36 -0
- package/src/lib/crypto.ts +40 -0
- package/src/lib/csp-builder.ts +2 -1
- package/src/lib/deferred.ts +79 -0
- package/src/lib/discover-ping.ts +141 -0
- package/src/lib/discover.ts +437 -0
- package/src/lib/env.ts +134 -0
- package/src/lib/errors.ts +33 -0
- package/src/lib/feed-policy.ts +236 -2
- package/src/lib/feed.ts +1021 -66
- package/src/lib/filter-dimensions.ts +1349 -0
- package/src/lib/github-sync-site-config.ts +3 -0
- package/src/lib/hosted-signin.ts +1 -1
- package/src/lib/http-cache.ts +148 -0
- package/src/lib/hugo-markdown.ts +21 -0
- package/src/lib/icons.ts +9 -2
- package/src/lib/ids.ts +3 -0
- package/src/lib/jant-docs.ts +42 -0
- package/src/lib/lang-detect.ts +308 -0
- package/src/lib/link-preview.ts +25 -0
- package/src/lib/markdown-manager.ts +6 -1
- package/src/lib/media-helpers.ts +13 -1
- package/src/lib/navigation.ts +78 -11
- package/src/lib/pagination.ts +28 -24
- package/src/lib/per-language-surfaces.ts +67 -0
- package/src/lib/post-display.ts +42 -9
- package/src/lib/post-meta.ts +19 -0
- package/src/lib/render.tsx +55 -7
- package/src/lib/resolve-config.ts +53 -5
- package/src/lib/schemas.ts +201 -10
- package/src/lib/site-header-fragment.tsx +2 -1
- package/src/lib/site-unavailable-page.ts +47 -0
- package/src/lib/slug.ts +51 -7
- package/src/lib/slugify.ts +113 -0
- package/src/lib/startup-config.ts +4 -6
- package/src/lib/storage.ts +7 -0
- package/src/lib/summary.ts +50 -0
- package/src/lib/thread-fold.ts +161 -0
- package/src/lib/time.ts +32 -0
- package/src/lib/timeline.ts +81 -10
- package/src/lib/tiptap-render.ts +5 -4
- package/src/lib/translit.ts +288 -0
- package/src/lib/upload.ts +16 -13
- package/src/lib/url.ts +188 -24
- package/src/lib/version.ts +10 -8
- package/src/lib/view-language.ts +436 -0
- package/src/lib/view.ts +79 -23
- package/src/lib/viewer-context.ts +62 -0
- package/src/middleware/__tests__/auth.test.ts +70 -2
- package/src/middleware/__tests__/cache-control.test.ts +71 -3
- package/src/middleware/__tests__/onboarding.test.ts +76 -5
- package/src/middleware/__tests__/secure-headers.test.ts +1 -1
- package/src/middleware/__tests__/session.test.ts +181 -33
- package/src/middleware/auth.ts +50 -31
- package/src/middleware/cache-control.ts +75 -10
- package/src/middleware/config.ts +6 -6
- package/src/middleware/error-handler.ts +12 -0
- package/src/middleware/onboarding.ts +32 -10
- package/src/middleware/secure-headers.ts +1 -1
- package/src/middleware/session.ts +96 -8
- package/src/node/__tests__/cli-migrate.test.ts +21 -19
- package/src/node/__tests__/cli-reset-password.test.ts +81 -8
- package/src/node/__tests__/cli-runtime-target.test.ts +48 -1
- package/src/node/__tests__/cli-site-selection.test.ts +128 -38
- package/src/node/__tests__/runtime.test.ts +37 -0
- package/src/node/index.ts +1 -0
- package/src/preset.css +76 -22
- package/src/routes/__tests__/feed-validator.test.ts +156 -0
- package/src/routes/api/__tests__/collections.test.ts +114 -0
- package/src/routes/api/__tests__/discover.test.ts +222 -0
- package/src/routes/api/__tests__/nav-items.test.ts +212 -2
- package/src/routes/api/__tests__/palette.test.ts +44 -0
- package/src/routes/api/__tests__/post-translations.test.ts +829 -0
- package/src/routes/api/__tests__/settings.test.ts +24 -3
- package/src/routes/api/__tests__/telegram.test.ts +6 -5
- package/src/routes/api/collections.ts +49 -6
- package/src/routes/api/custom-urls.ts +0 -1
- package/src/routes/api/discover.ts +95 -0
- package/src/routes/api/export.ts +3 -0
- package/src/routes/api/internal/__tests__/sites.test.ts +42 -2
- package/src/routes/api/nav-items.ts +55 -8
- package/src/routes/api/posts.ts +172 -9
- package/src/routes/api/public/__tests__/archive.test.ts +111 -0
- package/src/routes/api/public/__tests__/posts.test.ts +38 -0
- package/src/routes/api/public/archive.ts +77 -81
- package/src/routes/api/public/posts.ts +30 -6
- package/src/routes/api/smart-collections.ts +132 -0
- package/src/routes/api/telegram.ts +2 -40
- package/src/routes/api/uploads.ts +1 -2
- package/src/routes/auth/__tests__/setup-auth.test.ts +137 -0
- package/src/routes/auth/__tests__/setup-discover.test.ts +204 -0
- package/src/routes/auth/__tests__/setup-flow.test.ts +270 -0
- package/src/routes/auth/__tests__/setup-page.test.tsx +329 -0
- package/src/routes/auth/__tests__/setup-steps.test.ts +310 -0
- package/src/routes/auth/__tests__/setup.test.ts +278 -26
- package/src/routes/auth/__tests__/signin.test.ts +135 -0
- package/src/routes/auth/setup.tsx +934 -186
- package/src/routes/auth/signin.tsx +10 -8
- package/src/routes/compose.tsx +11 -2
- package/src/routes/dash/__tests__/custom-urls-archive.test.ts +44 -0
- package/src/routes/dash/__tests__/custom-urls-page.test.ts +49 -0
- package/src/routes/dash/__tests__/delete-account.test.ts +106 -0
- package/src/routes/dash/__tests__/settings-discover.test.ts +213 -0
- package/src/routes/dash/custom-urls.tsx +1 -37
- package/src/routes/dash/settings.tsx +502 -41
- package/src/routes/discover-announce.ts +96 -0
- package/src/routes/feed/__tests__/feed.test.ts +165 -2
- package/src/routes/feed/__tests__/sitemap.test.ts +68 -1
- package/src/routes/feed/feed.ts +69 -40
- package/src/routes/feed/sitemap.ts +95 -11
- package/src/routes/pages/__tests__/archive-indexing.test.ts +200 -0
- package/src/routes/pages/__tests__/archive-params.test.ts +657 -1
- package/src/routes/pages/__tests__/collection-routing.test.ts +16 -0
- package/src/routes/pages/__tests__/collections-feed-links.test.ts +72 -0
- package/src/routes/pages/__tests__/collections.test.ts +9 -3
- package/src/routes/pages/__tests__/custom-archive-url.test.ts +119 -0
- package/src/routes/pages/__tests__/featured.test.ts +6 -2
- package/src/routes/pages/__tests__/feed-autodiscovery.test.ts +148 -0
- package/src/routes/pages/__tests__/language-routing.test.ts +679 -0
- package/src/routes/pages/__tests__/post-preview-partial.test.ts +96 -0
- package/src/routes/pages/__tests__/preview.test.ts +3 -1
- package/src/routes/pages/__tests__/smart-collection.test.ts +298 -0
- package/src/routes/pages/__tests__/subscribe.test.ts +248 -0
- package/src/routes/pages/archive.tsx +507 -357
- package/src/routes/pages/collection.tsx +94 -96
- package/src/routes/pages/collections.tsx +38 -50
- package/src/routes/pages/featured.tsx +32 -13
- package/src/routes/pages/home.tsx +25 -6
- package/src/routes/pages/language.tsx +113 -0
- package/src/routes/pages/latest.tsx +26 -16
- package/src/routes/pages/new.tsx +3 -0
- package/src/routes/pages/page.tsx +183 -19
- package/src/routes/pages/partials.tsx +41 -0
- package/src/routes/pages/search.tsx +18 -3
- package/src/routes/pages/smart-collection.tsx +340 -0
- package/src/routes/pages/subscribe.tsx +182 -0
- package/src/runtime/__tests__/index.test.ts +19 -0
- package/src/runtime/__tests__/node.test.ts +129 -4
- package/src/runtime/cloudflare.ts +21 -2
- package/src/runtime/index.ts +27 -1
- package/src/runtime/node.ts +18 -1
- package/src/runtime/site.ts +95 -24
- package/src/services/__tests__/auth.test.ts +116 -7
- package/src/services/__tests__/collection.test.ts +139 -4
- package/src/services/__tests__/language.test.ts +495 -0
- package/src/services/__tests__/navigation.test.ts +213 -10
- package/src/services/__tests__/path.test.ts +180 -0
- package/src/services/__tests__/post-language.test.ts +830 -0
- package/src/services/__tests__/post-timeline.test.ts +142 -11
- package/src/services/__tests__/post.test.ts +323 -9
- package/src/services/__tests__/settings.test.ts +228 -17
- package/src/services/__tests__/site-admin.test.ts +5 -5
- package/src/services/__tests__/smart-collection.test.ts +651 -0
- package/src/services/about-page.ts +22 -1
- package/src/services/auth.ts +51 -49
- package/src/services/bootstrap.ts +188 -38
- package/src/services/collection-directory-position.ts +76 -0
- package/src/services/collection.ts +330 -47
- package/src/services/custom-url.ts +27 -22
- package/src/services/export-theme/assets/client-site.css +1 -1
- package/src/services/export-theme/assets/client-site.js +123 -123
- package/src/services/export-theme/layouts/_default/rss.xml +77 -1
- package/src/services/export-theme/layouts/partials/feed-post-content.xml +105 -2
- package/src/services/export-theme/layouts/partials/media-gallery.html +35 -21
- package/src/services/export-theme/layouts/partials/pagination.html +14 -13
- package/src/services/export-theme/layouts/partials/post-card.html +8 -4
- package/src/services/export-theme/layouts/partials/reply.html +2 -1
- package/src/services/export-theme/layouts/partials/thread-preview.html +40 -30
- package/src/services/export-theme/styles/main.css +13 -1
- package/src/services/export.ts +281 -24
- package/src/services/index.ts +34 -3
- package/src/services/language.ts +412 -0
- package/src/services/mcp.ts +3 -1
- package/src/services/media.ts +14 -6
- package/src/services/navigation.ts +429 -67
- package/src/services/path.ts +225 -7
- package/src/services/post.ts +1318 -252
- package/src/services/search.ts +48 -2
- package/src/services/settings.ts +238 -43
- package/src/services/site-admin.ts +24 -7
- package/src/services/site.ts +77 -1
- package/src/services/smart-collection.ts +636 -0
- package/src/services/telegram.ts +20 -22
- package/src/services/upload-session.ts +1 -3
- package/src/style-author.css +27 -0
- package/src/styles/components-author.css +1622 -0
- package/src/styles/components.css +24 -1585
- package/src/styles/site-media.css +20 -6
- package/src/styles/tokens.css +144 -13
- package/src/styles/ui-author.css +7602 -0
- package/src/styles/ui.css +1224 -7276
- package/src/types/app-context.ts +7 -0
- package/src/types/bindings.ts +3 -0
- package/src/types/config.ts +94 -15
- package/src/types/constants.ts +188 -16
- package/src/types/entities.ts +92 -1
- package/src/types/operations.ts +64 -2
- package/src/types/props.ts +168 -30
- package/src/types/views.ts +61 -1
- package/src/ui/__tests__/font-themes.test.ts +52 -12
- package/src/ui/compose/ComposeDialog.tsx +215 -21
- package/src/ui/compose/ComposePrompt.tsx +1 -5
- package/src/ui/compose/__tests__/ComposeDialog.test.tsx +125 -0
- package/src/ui/dash/appearance/AdvancedContent.tsx +2 -2
- package/src/ui/dash/appearance/CodeInjectionContent.tsx +12 -16
- package/src/ui/dash/appearance/NavigationContent.tsx +117 -16
- package/src/ui/dash/appearance/__tests__/NavigationContent.test.tsx +33 -11
- package/src/ui/dash/appearance/__tests__/system-nav-descriptions.test.ts +44 -0
- package/src/ui/dash/appearance/system-nav-descriptions.ts +75 -0
- package/src/ui/dash/settings/AccountMenuContent.tsx +2 -2
- package/src/ui/dash/settings/ApiTokensContent.tsx +2 -1
- package/src/ui/dash/settings/ConfigEditorContent.tsx +35 -16
- package/src/ui/dash/settings/GeneralContent.tsx +275 -113
- package/src/ui/dash/settings/LanguageContent.tsx +409 -0
- package/src/ui/dash/settings/SettingsRootContent.tsx +19 -1
- package/src/ui/dash/settings/__tests__/GeneralContent.test.tsx +324 -4
- package/src/ui/dash/settings/__tests__/LanguageContent.test.tsx +144 -0
- package/src/ui/dash/settings/__tests__/discover-copy.test.ts +66 -0
- package/src/ui/dash/settings/discover-copy.ts +116 -0
- package/src/ui/feed/LinkCard.tsx +55 -45
- package/src/ui/feed/LinkPreview.tsx +2 -7
- package/src/ui/feed/NoteCard.tsx +9 -4
- package/src/ui/feed/PostStatusBadges.tsx +103 -17
- package/src/ui/feed/QuoteCard.tsx +55 -30
- package/src/ui/feed/ThreadPreview.tsx +6 -2
- package/src/ui/feed/__tests__/thread-preview.test.ts +13 -16
- package/src/ui/feed/__tests__/timeline-cards.test.ts +314 -49
- package/src/ui/feed/thread-preview-state.ts +20 -6
- package/src/ui/font-themes.ts +39 -29
- package/src/ui/layouts/BaseLayout.tsx +155 -10
- package/src/ui/layouts/SiteLayout.tsx +192 -34
- package/src/ui/layouts/__tests__/BaseLayout.test.tsx +196 -17
- package/src/ui/layouts/__tests__/SiteLayout.test.tsx +109 -85
- package/src/ui/pages/ArchivePage.tsx +401 -301
- package/src/ui/pages/CollectionPage.tsx +86 -76
- package/src/ui/pages/CollectionsPage.tsx +5 -0
- package/src/ui/pages/ComposePage.tsx +8 -0
- package/src/ui/pages/PostPage.tsx +47 -0
- package/src/ui/pages/SearchPage.tsx +3 -3
- package/src/ui/pages/SmartCollectionPage.tsx +434 -0
- package/src/ui/pages/SubscribePage.tsx +236 -0
- package/src/ui/pages/__tests__/ArchivePage.test.tsx +122 -3
- package/src/ui/pages/__tests__/collections-directory-rows.test.tsx +92 -0
- package/src/ui/pages/__tests__/collections-view-links.test.tsx +81 -0
- package/src/ui/shared/CollectionDirectory.tsx +178 -3
- package/src/ui/shared/CollectionsManager.tsx +70 -17
- package/src/ui/shared/CopyField.tsx +127 -0
- package/src/ui/shared/DraftPreviewBar.tsx +25 -9
- package/src/ui/shared/EmptyPostContent.tsx +23 -0
- package/src/ui/shared/MediaGallery.tsx +125 -46
- package/src/ui/shared/Pagination.tsx +20 -5
- package/src/ui/shared/PostFooter.tsx +55 -23
- package/src/ui/shared/__tests__/archive-labels.test.ts +100 -0
- package/src/ui/shared/__tests__/media-gallery.test.ts +210 -2
- package/src/ui/shared/__tests__/navigation-labels.test.ts +16 -22
- package/src/ui/shared/__tests__/pagination.test.ts +38 -24
- package/src/ui/shared/__tests__/post-footer.test.ts +32 -0
- package/src/ui/shared/archive-labels.ts +98 -0
- package/src/ui/shared/collection-management-labels.ts +94 -16
- package/src/ui/shared/custom-icons.ts +5 -0
- package/src/ui/shared/navigation-labels.ts +45 -71
- package/src/ui/shared/post-article-attributes.ts +8 -0
- package/src/ui/shared/smart-collection-labels.ts +343 -0
- package/dist/app-BxCOR3Uc.js +0 -6
- package/dist/client/_assets/chunks/heic-to-DUUaO23q.js +0 -1
- package/dist/client/_assets/chunks/module-DcsAZQZ_.js +0 -716
- package/dist/client/_assets/chunks/url-pLre2DM_.js +0 -1
- package/dist/client/_assets/client-B_eGKN5p.css +0 -2
- package/dist/client/_assets/client-DxY5BFe8.js +0 -296
- package/dist/client/_assets/client-auth-CakPESv9.js +0 -5533
- package/dist/env-OHRKGcMj.js +0 -281
- package/dist/github-api-BgSiE71w.js +0 -176
- package/dist/github-app-BbklkFmU.js +0 -275
- package/dist/github-sync-Cq1pzzOI.js +0 -431
- package/dist/github-sync-ppWXN3jb.js +0 -4
- package/dist/url-BMYO-Zlt.js +0 -395
- package/src/client/__tests__/collection-created-notice.test.ts +0 -36
- package/src/client/__tests__/collection-form-bridge.test.ts +0 -216
- package/src/client/__tests__/post-form-bridge.test.ts +0 -82
- package/src/client/collection-created-notice.ts +0 -66
- package/src/client/collection-form-bridge.ts +0 -191
- package/src/client/components/__tests__/jant-post-form.test.ts +0 -193
- package/src/client/components/jant-post-form.ts +0 -422
- package/src/client/components/post-form-template.ts +0 -352
- package/src/client/components/post-form-types.ts +0 -96
- package/src/client/media-metadata.ts +0 -247
- package/src/client/post-form-bridge.ts +0 -193
- package/src/ui/pages/CollectionEditorPage.tsx +0 -175
|
@@ -203,8 +203,8 @@
|
|
|
203
203
|
display: flex;
|
|
204
204
|
align-items: center;
|
|
205
205
|
gap: 2px;
|
|
206
|
-
height:
|
|
207
|
-
padding: 0 6px;
|
|
206
|
+
height: 50px;
|
|
207
|
+
padding: 0 6px 6px;
|
|
208
208
|
box-sizing: border-box;
|
|
209
209
|
background: linear-gradient(to top, rgba(0, 0, 0, 0.68), rgba(0, 0, 0, 0));
|
|
210
210
|
pointer-events: none;
|
|
@@ -426,8 +426,8 @@
|
|
|
426
426
|
@media (hover: none), (pointer: coarse) {
|
|
427
427
|
.media-lightbox-short-frame-contained {
|
|
428
428
|
display: grid;
|
|
429
|
-
grid-template-rows: minmax(0, 1fr)
|
|
430
|
-
height: calc(var(--media-lightbox-short-height) +
|
|
429
|
+
grid-template-rows: minmax(0, 1fr) 50px;
|
|
430
|
+
height: calc(var(--media-lightbox-short-height) + 50px);
|
|
431
431
|
}
|
|
432
432
|
|
|
433
433
|
.media-lightbox-short-controls {
|
|
@@ -487,10 +487,24 @@
|
|
|
487
487
|
cursor: pointer;
|
|
488
488
|
}
|
|
489
489
|
|
|
490
|
+
/*
|
|
491
|
+
* No height cap and no fit here: the gallery owns both, and sets them together
|
|
492
|
+
* in its markup. In a row it hands every item the same inline `height` and
|
|
493
|
+
* crops it to that height (`object-cover`), so a clip lines up with the
|
|
494
|
+
* pictures beside it. A lone visual gets `min(100%, 24rem * ratio, …)` for its
|
|
495
|
+
* width, which caps its height at 24rem on its own, and a lone clip is
|
|
496
|
+
* letterboxed (`object-contain`) in case its frames disagree with the stored
|
|
497
|
+
* size.
|
|
498
|
+
*
|
|
499
|
+
* Each value this rule used to carry only re-entered as a second opinion. A
|
|
500
|
+
* `max-height` left the video short in a row taller than the cap (a portrait
|
|
501
|
+
* first picture pushed it to 440px), with the frame showing underneath it. An
|
|
502
|
+
* `object-fit: contain` lost to the row's `object-cover` only because this
|
|
503
|
+
* sheet sits in the components layer; a copy without the layer letterboxed
|
|
504
|
+
* every clip in a row.
|
|
505
|
+
*/
|
|
490
506
|
.media-video-wrap video {
|
|
491
507
|
width: 100%;
|
|
492
|
-
max-height: 24rem;
|
|
493
|
-
object-fit: contain;
|
|
494
508
|
background-color: var(--color-muted);
|
|
495
509
|
}
|
|
496
510
|
|
package/src/styles/tokens.css
CHANGED
|
@@ -8,8 +8,27 @@
|
|
|
8
8
|
|
|
9
9
|
:root {
|
|
10
10
|
/* Typography — Font families */
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
/*
|
|
12
|
+
* CJK fallback slots, kept in sync with `DEFAULT_FONT_CJK_*_FALLBACK` in
|
|
13
|
+
* `ui/font-themes.ts` (a test asserts they match). A page whose language names
|
|
14
|
+
* a CJK profile overrides both with a stack that leads on its own glyph
|
|
15
|
+
* shapes; every other page keeps these, because the Latin families and the
|
|
16
|
+
* `serif` / `sans-serif` generics around them have no Han coverage and would
|
|
17
|
+
* otherwise drop the text to the OS last-resort font.
|
|
18
|
+
*/
|
|
19
|
+
--font-cjk-serif-fallback:
|
|
20
|
+
"Songti SC", STSong, SimSun, "Noto Serif SC", "Noto Serif CJK SC",
|
|
21
|
+
"Songti TC", PMingLiU, MingLiU, "Noto Serif TC", "Noto Serif CJK TC",
|
|
22
|
+
"Hiragino Mincho ProN", "Hiragino Mincho Pro", "Yu Mincho", YuMincho,
|
|
23
|
+
"Noto Serif JP", "Noto Serif CJK JP", "MS PMincho", "MS Mincho", Batang,
|
|
24
|
+
"Noto Serif KR", "Noto Serif CJK KR", NanumMyeongjo;
|
|
25
|
+
--font-cjk-sans-fallback:
|
|
26
|
+
"PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC",
|
|
27
|
+
"Noto Sans CJK SC", "PingFang TC", "Hiragino Sans CNS",
|
|
28
|
+
"Microsoft JhengHei", "Noto Sans TC", "Noto Sans CJK TC", "Hiragino Sans",
|
|
29
|
+
"Hiragino Kaku Gothic ProN", "Yu Gothic", YuGothic, "Noto Sans JP",
|
|
30
|
+
"Noto Sans CJK JP", Meiryo, "Apple SD Gothic Neo", "Noto Sans KR",
|
|
31
|
+
"Noto Sans CJK KR", "Malgun Gothic";
|
|
13
32
|
--font-body:
|
|
14
33
|
system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
|
|
15
34
|
"Helvetica Neue", Helvetica, Arial, var(--font-cjk-sans-fallback),
|
|
@@ -124,7 +143,26 @@
|
|
|
124
143
|
--form-max-width: 42rem;
|
|
125
144
|
/* compose dialogs + feed content cap */
|
|
126
145
|
--layout-body-max-width: 1088px;
|
|
146
|
+
/*
|
|
147
|
+
* Two widths, one column — keep the distinction straight.
|
|
148
|
+
*
|
|
149
|
+
* `--layout-content-width` is the Tufte proportion: how much of a page
|
|
150
|
+
* section its content occupies, leaving the rest as sidenote gutter. Page
|
|
151
|
+
* shells that should fill the frame once the gutter is gone (settings,
|
|
152
|
+
* the collections directory) read this one, which is why it flattens to
|
|
153
|
+
* 100% below 1024px.
|
|
154
|
+
*
|
|
155
|
+
* `--layout-reading-width` is the reading column a post's text actually
|
|
156
|
+
* gets. It tracks the proportion while the gutter exists, then keeps a
|
|
157
|
+
* measure of its own instead of going full-width. Anything that must line
|
|
158
|
+
* up with body copy — the text blocks in preset.css, a lone image
|
|
159
|
+
* (MediaGallery `getSingleVisualWidth`), a link preview, the feed divider
|
|
160
|
+
* that centers over the column — reads this one. Before it existed those
|
|
161
|
+
* consumers capped on the proportion and quietly outgrew the text between
|
|
162
|
+
* 700px and 1024px.
|
|
163
|
+
*/
|
|
127
164
|
--layout-content-width: 55%;
|
|
165
|
+
--layout-reading-width: var(--layout-content-width);
|
|
128
166
|
--layout-sidenote-width: 50%;
|
|
129
167
|
--layout-sidenote-gap: 10%;
|
|
130
168
|
--layout-sidenote-margin: -60%;
|
|
@@ -169,7 +207,7 @@
|
|
|
169
207
|
* -bottom: gap from the intro down to its separator — the hairline (logged
|
|
170
208
|
* out) or the compose prompt text (logged in). Same values in both states.
|
|
171
209
|
*/
|
|
172
|
-
--site-intro-gap-top:
|
|
210
|
+
--site-intro-gap-top: 20px;
|
|
173
211
|
--site-intro-gap-bottom: 36px;
|
|
174
212
|
|
|
175
213
|
/* Sidebar layout (admin + site sidebar pages) */
|
|
@@ -203,7 +241,30 @@
|
|
|
203
241
|
);
|
|
204
242
|
--site-threadline: var(--border);
|
|
205
243
|
--site-page-bg: var(--background);
|
|
244
|
+
/* Despite the name, this is the page colour and ~60 rules use it that way —
|
|
245
|
+
including three that use it as *text* on a dark button. It cannot be
|
|
246
|
+
lifted without repainting the whole site; `--site-raised-bg` below is the
|
|
247
|
+
one that actually means "above the page". Read this as
|
|
248
|
+
"--site-default-surface" until the call sites are triaged. */
|
|
206
249
|
--site-elevated-bg: var(--background);
|
|
250
|
+
/* What sits *above* the page: dialogs, popovers, menus, sheets. On a light
|
|
251
|
+
page this is the page colour, because the separating is done by the
|
|
252
|
+
backdrop dim and the drop shadows — both black over white. Neither works
|
|
253
|
+
on a dark page: 30% black over `#110f0d` composites to `#0c0b09`, and a
|
|
254
|
+
black shadow on near-black is nothing at all, which left the compose
|
|
255
|
+
dialog at 1.03:1 against its own backdrop. So in dark mode this lifts
|
|
256
|
+
instead (see the dark blocks below). Elevation there is lightness, not
|
|
257
|
+
shadow. */
|
|
258
|
+
--site-raised-bg: var(--site-page-bg);
|
|
259
|
+
/* The edge of a raised layer. On a light page the fill already separates and
|
|
260
|
+
this is just a hairline; on a dark one it does most of the work, because
|
|
261
|
+
the fill has almost no room to lift into. Same formula as
|
|
262
|
+
`--compose-control-border` in light so nothing moves there. */
|
|
263
|
+
--site-raised-border: color-mix(
|
|
264
|
+
in srgb,
|
|
265
|
+
var(--site-column-outline) 68%,
|
|
266
|
+
transparent
|
|
267
|
+
);
|
|
207
268
|
--site-nav-hover-bg: var(--accent);
|
|
208
269
|
--site-text-primary: var(--foreground);
|
|
209
270
|
--site-text-secondary: var(--muted-foreground);
|
|
@@ -350,7 +411,10 @@
|
|
|
350
411
|
var(--site-accent) 16%,
|
|
351
412
|
transparent
|
|
352
413
|
);
|
|
353
|
-
|
|
414
|
+
/* The composer is a floating sheet in every mode but one, so its paper is
|
|
415
|
+
the raised surface. `.compose-page` — the full-page `/new` composer, which
|
|
416
|
+
*is* the page — puts this back to `--site-page-bg` locally. */
|
|
417
|
+
--compose-paper-bg: var(--site-raised-bg);
|
|
354
418
|
--compose-control-bg: color-mix(
|
|
355
419
|
in srgb,
|
|
356
420
|
var(--site-nav-hover-bg) 72%,
|
|
@@ -366,6 +430,15 @@
|
|
|
366
430
|
var(--site-column-outline) 68%,
|
|
367
431
|
transparent
|
|
368
432
|
);
|
|
433
|
+
/* The tools row sits directly under the sentence being written, so its icons
|
|
434
|
+
stay a step behind the body's own muted ink and only come forward when
|
|
435
|
+
pointed at or switched on. 72% keeps the faded state above the 3:1
|
|
436
|
+
non-text contrast floor. */
|
|
437
|
+
--compose-tool-ink: color-mix(
|
|
438
|
+
in srgb,
|
|
439
|
+
var(--site-text-secondary) 72%,
|
|
440
|
+
var(--compose-paper-bg)
|
|
441
|
+
);
|
|
369
442
|
--compose-blockquote-rail: color-mix(
|
|
370
443
|
in srgb,
|
|
371
444
|
var(--site-accent) 24%,
|
|
@@ -401,7 +474,38 @@
|
|
|
401
474
|
--dash-card-radius: 10px;
|
|
402
475
|
}
|
|
403
476
|
|
|
404
|
-
|
|
477
|
+
/* =========================================================================
|
|
478
|
+
* Breakpoint ledger
|
|
479
|
+
*
|
|
480
|
+
* Every width breakpoint in the stylesheets comes from this list, and each
|
|
481
|
+
* entry names the one job it does. `src/__tests__/stylesheet-breakpoints.test.ts`
|
|
482
|
+
* fails the build on anything else, because a second number for a job that
|
|
483
|
+
* already has one is how the phone switch drifted apart before: the composer
|
|
484
|
+
* once went full-screen at 700px while its own controls took their touch
|
|
485
|
+
* sizing at 760px, so a 750px window got thumb-sized buttons inside a windowed
|
|
486
|
+
* dialog.
|
|
487
|
+
*
|
|
488
|
+
* 480px Header hamburger; the composer's post-meta pill sheds its words.
|
|
489
|
+
* 580px Nav collapse tier-sm (hides the 3rd inline link).
|
|
490
|
+
* 640px Media grid and lightbox chrome.
|
|
491
|
+
* 700px THE PHONE SWITCH. Below it the layout is a phone's: the composer
|
|
492
|
+
* is a full-screen sheet, the compose FAB appears, page gutters and
|
|
493
|
+
* the content type scale go narrow. Written `max-width: 699px` on
|
|
494
|
+
* the phone side and `min-width: 700px` on the desktop side, so the
|
|
495
|
+
* two never both match at 700px itself.
|
|
496
|
+
* 780px Nav collapse tier-md (also hides the 4th inline link).
|
|
497
|
+
* 960px Nav collapse tier-lg (hides the 5th+ inline link into More).
|
|
498
|
+
* 1024px Tufte two-column → single-column (see the note below).
|
|
499
|
+
* 1079px Collections sidebar drops out.
|
|
500
|
+
* 1200px Header search collapses to an icon.
|
|
501
|
+
*
|
|
502
|
+
* Touch is NOT a width. Thumb-sized controls and always-visible affordances
|
|
503
|
+
* belong to `(hover: none) and (pointer: coarse)`, which is what actually
|
|
504
|
+
* catches a phone or a tablet; a narrow desktop window is still a mouse.
|
|
505
|
+
* Rules that want both say both.
|
|
506
|
+
* ========================================================================= */
|
|
507
|
+
|
|
508
|
+
@media (max-width: 699px) {
|
|
405
509
|
:root {
|
|
406
510
|
--site-padding: 1.875rem;
|
|
407
511
|
}
|
|
@@ -409,17 +513,18 @@
|
|
|
409
513
|
|
|
410
514
|
/* Tufte two-column → single-column collapse.
|
|
411
515
|
*
|
|
412
|
-
*
|
|
413
|
-
*
|
|
414
|
-
*
|
|
415
|
-
*
|
|
516
|
+
* There is no room for a 45% sidenote gutter here, so page shells go
|
|
517
|
+
* full-width — but the reading column does not follow them. It keeps a 35rem
|
|
518
|
+
* measure, and everything sized to the text (preset.css blocks, single images,
|
|
519
|
+
* link previews, the feed divider) tracks that through
|
|
520
|
+
* `--layout-reading-width` rather than restating the number.
|
|
416
521
|
*
|
|
417
|
-
* Keep this breakpoint in sync with the
|
|
418
|
-
* ui.css
|
|
419
|
-
* collapse (ui.css). They are one layout switch; do not let them drift apart. */
|
|
522
|
+
* Keep this breakpoint in sync with the sidenote float→inline collapse
|
|
523
|
+
* (ui.css). They are one layout switch; do not let them drift apart. */
|
|
420
524
|
@media (max-width: 1024px) {
|
|
421
525
|
:root {
|
|
422
526
|
--layout-content-width: 100%;
|
|
527
|
+
--layout-reading-width: min(100%, 35rem);
|
|
423
528
|
}
|
|
424
529
|
}
|
|
425
530
|
|
|
@@ -471,6 +576,16 @@
|
|
|
471
576
|
--search-mark-bg: oklch(0.45 0.1 85 / 0.5);
|
|
472
577
|
--search-mark-color: oklch(0.92 0.08 90);
|
|
473
578
|
--dash-bg: oklch(0.2 0.005 80);
|
|
579
|
+
--site-raised-bg: color-mix(
|
|
580
|
+
in oklab,
|
|
581
|
+
var(--background) 88%,
|
|
582
|
+
var(--foreground)
|
|
583
|
+
);
|
|
584
|
+
--site-raised-border: color-mix(
|
|
585
|
+
in oklab,
|
|
586
|
+
var(--site-raised-bg) 78%,
|
|
587
|
+
var(--foreground)
|
|
588
|
+
);
|
|
474
589
|
}
|
|
475
590
|
}
|
|
476
591
|
|
|
@@ -501,9 +616,25 @@
|
|
|
501
616
|
--search-mark-bg: oklch(0.45 0.1 85 / 0.5);
|
|
502
617
|
--search-mark-color: oklch(0.92 0.08 90);
|
|
503
618
|
--dash-bg: oklch(0.2 0.005 80);
|
|
619
|
+
/* 12% of the foreground mixed into the page. The headroom here is small and
|
|
620
|
+
bounded: `--site-divider` sits 1.36:1 above the page, and a surface lifted
|
|
621
|
+
past it would swallow every hairline drawn on it. 12% lands at 1.24:1 —
|
|
622
|
+
most of the range that exists, with the dividers still on top of it. */
|
|
623
|
+
--site-raised-bg: color-mix(
|
|
624
|
+
in oklab,
|
|
625
|
+
var(--background) 88%,
|
|
626
|
+
var(--foreground)
|
|
627
|
+
);
|
|
628
|
+
/* Carries the separation the fill cannot: 12% of lift is most of the room
|
|
629
|
+
the palette has, so the edge has to say the rest. */
|
|
630
|
+
--site-raised-border: color-mix(
|
|
631
|
+
in oklab,
|
|
632
|
+
var(--site-raised-bg) 78%,
|
|
633
|
+
var(--foreground)
|
|
634
|
+
);
|
|
504
635
|
}
|
|
505
636
|
|
|
506
|
-
@media (max-width:
|
|
637
|
+
@media (max-width: 699px), (hover: none) and (pointer: coarse) {
|
|
507
638
|
:root {
|
|
508
639
|
/* Content layer — tighter scale for mobile reading.
|
|
509
640
|
Ratio ≈ 1.88 : 1.42 : 1.15 : 1 (display:title:subtitle:body).
|